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;
我有一组不同的 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;