扳机:将已删除的行移动到存档表
-
16-10-2019 - |
题
我有一个小(约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中的审计跟踪:)
不隶属于 dba.stackexchange