В Postgres 10+ вы можете использовать таблицу переходов в триггере AFTER, см. Пример 43.7. Аудит с таблицами переходов . Предполагая, что id
является первичным ключом (или уникальным):
create table my_table(id int primary key, message text);
Вы можете обновить одну и удалить оставшиеся вставленные строки:
create or replace function after_insert_on_my_table()
returns trigger language plpgsql as $$
declare r record;
begin
select
array_agg(id) as ids,
array_to_string(array_agg(message), e'\n') as message
from new_table
into r;
update my_table
set message = r.message
where id = r.ids[1];
delete from my_table
where id = any(r.ids[2:]);
return null;
end $$;
В определении триггера объявите таблицу переходов (как new_table
):
create trigger after_insert_on_my_table
after insert on my_table
referencing new table as new_table
for each statement
execute procedure after_insert_on_my_table();
В более ранних версиях Postgres вы можете имитировать таблицу переходов , представленную в Postgres 10.
Проверьте это в db <> скрипке.