Advertisement
madrahimov

Untitled

Dec 1st, 2016
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.56 KB | None | 0 0
  1. -- Динамическое получение название таблицы
  2. DROP FUNCTION get_bill_couses_part_name(timestamp without time zone);
  3. CREATE OR REPLACE FUNCTION get_bill_couses_part_name(created_at timestamp without time zone)
  4. RETURNS character varying AS
  5. $BODY$
  6. declare
  7. _part_from character varying;
  8. _part_to character varying;
  9. _table_name character varying;
  10. begin
  11. _part_from := to_char((date_trunc('MONTH', created_at::date))::date, 'YYYY_MM_DD');
  12. _part_to := to_char((date_trunc('MONTH', created_at::date) + INTERVAL '1 MONTH - 1 day')::date, 'YYYY_MM_DD');
  13. _table_name := 'bill.bill_courses_' || _part_from || '_' || _part_to;
  14. return _table_name;
  15. end;
  16. $BODY$
  17. LANGUAGE plpgsql VOLATILE
  18. COST 100;
  19. ALTER FUNCTION get_bill_couses_part_name(timestamp without time zone)
  20. OWNER TO developer;
  21. GRANT EXECUTE ON FUNCTION get_bill_couses_part_name(timestamp without time zone) TO developer;
  22.  
  23.  
  24. -- Триггер
  25.  
  26.  
  27. CREATE OR REPLACE FUNCTION bill_courses_partition_create_function()
  28. RETURNS TRIGGER AS
  29. $BODY$
  30. BEGIN
  31. 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
  32. EXECUTE format('INSERT INTO %s SELECT ($1).*', get_bill_couses_part_name(NEW.created_at::timestamp without time zone)) USING NEW;
  33. ELSE
  34. RAISE EXCEPTION 'Date out of range, probably child table is missing';
  35. END IF;
  36. RETURN NULL;
  37. END;
  38. $BODY$
  39. LANGUAGE plpgsql VOLATILE
  40. COST 100;
  41. ALTER FUNCTION bill_courses_partition_create_function()
  42. OWNER TO developer;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement