Skip to content

Instantly share code, notes, and snippets.

@ejrh
Created August 5, 2016 02:00
Show Gist options
  • Save ejrh/525a83f3165f153360fd5a256dabae0b to your computer and use it in GitHub Desktop.
Save ejrh/525a83f3165f153360fd5a256dabae0b to your computer and use it in GitHub Desktop.
CREATE OR REPLACE FUNCTION public.forecast_base_1_part_trig_func()
RETURNS trigger AS
$BODY$
DECLARE
v_count int;
v_partition_name text;
v_partition_timestamp timestamptz;
BEGIN
IF TG_OP = 'INSERT' THEN
v_partition_timestamp := date_trunc('day', NEW.nwp_analysis_at_date);
IF NEW.nwp_analysis_at_date >= '2016-08-05 00:00:00+00' AND NEW.nwp_analysis_at_date < '2016-08-06 00:00:00+00' THEN
INSERT INTO public.forecast_base_1_p2016_08_05 VALUES (NEW.*);
ELSIF NEW.nwp_analysis_at_date >= '2016-08-04 00:00:00+00' AND NEW.nwp_analysis_at_date < '2016-08-05 00:00:00+00' THEN
INSERT INTO public.forecast_base_1_p2016_08_04 VALUES (NEW.*);
ELSIF NEW.nwp_analysis_at_date >= '2016-08-06 00:00:00+00' AND NEW.nwp_analysis_at_date < '2016-08-07 00:00:00+00' THEN
INSERT INTO public.forecast_base_1_p2016_08_06 VALUES (NEW.*);
ELSIF NEW.nwp_analysis_at_date >= '2016-08-03 00:00:00+00' AND NEW.nwp_analysis_at_date < '2016-08-04 00:00:00+00' THEN
INSERT INTO public.forecast_base_1_p2016_08_03 VALUES (NEW.*);
ELSIF NEW.nwp_analysis_at_date >= '2016-08-07 00:00:00+00' AND NEW.nwp_analysis_at_date < '2016-08-08 00:00:00+00' THEN
INSERT INTO public.forecast_base_1_p2016_08_07 VALUES (NEW.*);
ELSIF NEW.nwp_analysis_at_date >= '2016-08-02 00:00:00+00' AND NEW.nwp_analysis_at_date < '2016-08-03 00:00:00+00' THEN
INSERT INTO public.forecast_base_1_p2016_08_02 VALUES (NEW.*);
ELSIF NEW.nwp_analysis_at_date >= '2016-08-01 00:00:00+00' AND NEW.nwp_analysis_at_date < '2016-08-02 00:00:00+00' THEN
INSERT INTO public.forecast_base_1_p2016_08_01 VALUES (NEW.*);
ELSE
v_partition_name := partman.check_name_length('forecast_base_1', to_char(v_partition_timestamp, 'YYYY_MM_DD'), TRUE);
SELECT count(*) INTO v_count FROM pg_catalog.pg_tables WHERE schemaname = 'public'::name AND tablename = v_partition_name::name;
IF v_count > 0 THEN
EXECUTE format('INSERT INTO %I.%I VALUES($1.*)', 'public', v_partition_name) USING NEW;
ELSE
RETURN NEW;
END IF;
END IF;
END IF;
RETURN NULL;
EXCEPTION WHEN OTHERS THEN
RAISE WARNING 'pg_partman insert into child table failed, row inserted into parent (%.%). ERROR: %', TG_TABLE_SCHEMA, TG_TABLE_NAME, COALESCE(SQLERRM, 'unknown');
RETURN NEW;
END $BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION public.forecast_base_1_part_trig_func()
OWNER TO postgres;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment