Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Динамическое получение название таблицы
- DROP FUNCTION get_bill_couses_part_name(timestamp without time zone);
- CREATE OR REPLACE FUNCTION get_bill_couses_part_name(created_at timestamp without time zone)
- RETURNS character varying AS
- $BODY$
- declare
- _part_from character varying;
- _part_to character varying;
- _table_name character varying;
- begin
- _part_from := to_char((date_trunc('MONTH', created_at::date))::date, 'YYYY_MM_DD');
- _part_to := to_char((date_trunc('MONTH', created_at::date) + INTERVAL '1 MONTH - 1 day')::date, 'YYYY_MM_DD');
- _table_name := 'bill.bill_courses_' || _part_from || '_' || _part_to;
- return _table_name;
- end;
- $BODY$
- LANGUAGE plpgsql VOLATILE
- COST 100;
- ALTER FUNCTION get_bill_couses_part_name(timestamp without time zone)
- OWNER TO developer;
- GRANT EXECUTE ON FUNCTION get_bill_couses_part_name(timestamp without time zone) TO developer;
- -- Триггер
- CREATE OR REPLACE FUNCTION bill_courses_partition_create_function()
- RETURNS TRIGGER AS
- $BODY$
- BEGIN
- IF (NEW.created_at >= '2016-11-01 00:00:00'::timestamp without time zone AND NEW.created_at < '2019-02-01 00:00:00'::timestamp without time zone) THEN
- EXECUTE format('INSERT INTO %s SELECT ($1).*', get_bill_couses_part_name(NEW.created_at::timestamp without time zone)) USING NEW;
- ELSE
- RAISE EXCEPTION 'Date out of range, probably child table is missing';
- END IF;
- RETURN NULL;
- END;
- $BODY$
- LANGUAGE plpgsql VOLATILE
- COST 100;
- ALTER FUNCTION bill_courses_partition_create_function()
- OWNER TO developer;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement