Postgres 触发器:将旧记录写入新 table

Postgres triggers: write old record to new table

我有一组不同的 table 在 DELETE 时触发。我想在不同的架构上将已删除的行写入 table。

例如,假设我有几个不同的 tables:

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

我在其他一些架构上有这些相同 table 的副本

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

每个非备份table A 和B 都有一个删除触发器(用plpgsql 编写)。如果我从这些 table 中的任何一个中删除一条记录,我如何编写一个触发器函数将删除的记录写入关联的备份 table?

你确实可以用触发器来做到这一点。每个 table 需要一个触发器,例如:

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;

我能够使用一个 non-table 特定的触发函数将删除的记录写入我的备份表:

create or replace function track_delete() returns trigger as
$body$
BEGIN
    execute format('insert into backup.%I values(.*)', tg_table_name) USING old;
END;
$body$
language plpgsql;