Created
August 5, 2016 02:00
-
-
Save ejrh/525a83f3165f153360fd5a256dabae0b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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