触发器:将删除的行移动到归档表

Ada*_*tan 21 postgresql trigger delete plpgsql

我的restrictionsPostgreSQL 数据库中有一个小(约 10 行)表,其中每天删除和插入值。

我想要一个名为 的表restrictions_deleted,从中删除的每一行都restrictions将自动存储。由于restrictions具有序列号,因此不会有重复项。

如何在 PostgreSQL 中编写这样的触发器?

DrC*_*sos 18

您只需要在旧数据restrictions_deleted被删除之前将其移动到表中。这是通过OLD数据类型完成的。您可以使用regulatINSERT语句并将这些OLD值用作要插入的值。

CREATE TRIGGER moveDeleted
BEFORE DELETE ON restrictions 
FOR EACH ROW
EXECUTE PROCEDURE moveDeleted();


CREATE FUNCTION moveDeleted() RETURNS trigger AS $$
    BEGIN
       INSERT INTO restrictions_deleted VALUES(OLD.column1, OLD.column2,...);
       RETURN OLD;
    END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

  • 您可以将列值的显式列表替换为类似`VALUES((OLD).*)` (2认同)
  • 工作正常,但需要在“创建触发器”之前调用“创建函数”。KayEss 建议的“VALUES((OLD).*)”技巧很好。 (2认同)

Jac*_*las 8

如果您对不同的方法持开放态度,您是否考虑过向表中添加“已删除”布尔标志,或者改为添加“已删除”时间戳。

或者更好的是,拒绝 CRUD 访问您的数据库表并在您的事务 API 中处理审计跟踪 :)