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

我想有一张桌子叫 restrictions_deleted, ,从中删除的每一行 restrictions 将自动存储。自从 restrictions 有一个序列号,不会有重复。

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

有帮助吗?

解决方案

您只需要将旧数据移动到 restrictions_deleted 删除之前的表。这是通过 OLD 数据类型。您可以使用调节 INSERT 声明和使用 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;

其他提示

如果您以其他方法开放,您是否考虑过在表中添加“已删除的”布尔标志,或者是“ DELETED_AT”时间戳。

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

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top