Postgres триггеры: записать старую запись в новую таблицу - PullRequest
1 голос
/ 27 марта 2020

У меня есть набор различных таблиц, которые имеют триггер на DELETE. Я хотел бы записать удаленные строки в похожую таблицу в другой схеме.

Например, скажем, у меня есть несколько разных таблиц:

CREATE TABLE A (val1 TEXT, val2 TEXT)
CREATE TABLE B (someval1 INT, someval2 TEXT, someval3 TEXT)

И у меня есть копии этих же таблицы в другой схеме

CREATE SCHEMA backup;
CREATE TABLE backup.A (like A);
CREATE TABLE backup.B (like B);

Каждая не резервная таблица A & B имеет триггер для удалений (записанный в plpg sql). Если я удаляю запись из любой из этих таблиц, как я могу написать функцию триггера, которая записывает удаленную запись в связанную таблицу резервных копий?

1 Ответ

1 голос
/ 27 марта 2020

Вы можете сделать это с помощью триггера. Вам нужен один триггер на таблицу, например:

create or replace function func_backup_tablea_before_delete()
return trigger as
$body$
begin
    insert into backup.tablea(val1, val2) values (old.val1, old.val2);
end;
$body$ 

create trigger trg_delete_a 
before delete on tablea
for each row
execute procedure func_backup_tablea_before_delete;
...