sql - Postgres 触发器 : write old record to new table

标签 sql postgresql plpgsql sql-delete database-trigger

我有一组不同的表,它们在 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 track_delete() returns trigger as
$body$
BEGIN
    execute format('insert into backup.%I values($1.*)', tg_table_name) USING old;
END;
$body$
language plpgsql;

关于sql - Postgres 触发器 : write old record to new table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60877977/

相关文章:

arrays - PostgreSQL - 动态表,在函数中插入文本数组中的值

php - 数据库之间的 Blob 编码差异

mysql - 如何获得每组的最大行数?

php - 在 Postgresql 数据库中处理 NaN

postgresql - 扫描Postgres float4时出错:无法将5000分配给pgtype.Float4

sql - 选择行单元格作为新列

java - SQLite聚合查询

sql - 在大查询中拆分子字符串并为每个子字符串创建新列

Python odo CSV 到 SQL - 没有这样的文件或目录

sql - PostgreSQL IF-THEN-ELSE 控制结构