触发器:将已删除的行移至存档表


18

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

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

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

Answers:


16

您只需要restrictions_deleted在删除旧数据之前将其移到表中即可。这是通过OLD数据类型完成的。您可以使用regulat 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;

2
您可以将列值的明确列表替换为VALUES((OLD).*)
KayEss 2015年

1
工作正常,但create function需要在之前调用create trigger。而VALUES((OLD).*)通过KayEss建议伎俩是好的。
mivk '16

8

如果您愿意采用其他方法,是否考虑过在表中添加“已删除”布尔标志,或者添加“ deleted_at”时间戳。

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


+1谢谢-不能满足我的情况,但这是仅使用单个表的一种不错的方法。
亚当·马坦
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.