繁体   English   中英

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

[英]Postgres triggers: write old record to new table

我有一组不同的表,它们在 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 都有一个删除触发器(用 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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM