Sql Postgres触发器:将旧记录写入新表
我有一组不同的表,它们在删除时有一个触发器。我想将删除的行写入不同架构上的like表 例如,假设我有两个不同的表:Sql Postgres触发器:将旧记录写入新表,sql,postgresql,plpgsql,sql-delete,database-trigger,Sql,Postgresql,Plpgsql,Sql Delete,Database Trigger,我有一组不同的表,它们在删除时有一个触发器。我想将删除的行写入不同架构上的like表 例如,假设我有两个不同的表: 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 (
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都有一个删除触发器(用plpgsql编写)。如果我从这两个表中删除了一条记录,我如何才能编写一个触发器函数,将删除的记录写入关联的备份表?您确实可以使用触发器来完成此操作。每个表需要一个触发器,如:
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;
我能够使用一个非表特定的触发器函数将删除的记录写入备份表:
create or replace function track_delete() returns trigger as
$body$
BEGIN
execute format('insert into backup.%I values($1.*)', tg_table_name) USING old;
END;
$body$
language plpgsql;
我正在寻找一种方法,用一个函数为所有表执行此操作,因为在我的实际情况中,有不止几个表:(