Обработка данных для партиций в Postgresql
Переносим таблицы из Oracle в PG. Не мог найти рабочий пример для партиционирования по нескольким полям c использованием функции-триггера, помещающего запись в нужную таблицу-партицию и создающую ее в случае отсутствия. Пока есть неработающий вариант:
-- version: "PostgreSQL 12.9 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4), 64-bit"
-- drop table tst;
create table tst
(
id serial,
int_v int,
dt date,
v varchar
)
partition by range (int_v, dt);
create table tst_0_1222 partition of tst for values from (0, '01.01.2021') to (1, '01.01.2021');
-- Функция
create or replace function ins_tst()
returns trigger as
$$
begin
raise notice '%', new.dt::text; -- Всегда null почему-то
return null;
end
$$
language plpgsql;
-- Триггер
create trigger trg_tst
before insert on tst
--for each row -- Не позволяет для партиционированной таблицы, а без этого не могу обратиться к значению поля
execute function ins_tst();
insert into tst values (1, 1, current_timestamp, null);
Помогите, пожалуйста, привести это к правильной реализации.