Postgresql
觸發器:將刪除的行移動到存檔表
我在我的 PostgreSQL 數據庫中呼叫了一個小型(約 10 行)表
restrictions
,每天都會在其中刪除和插入值。我想要一個名為 的表
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;
如果您對不同的方法持開放態度,您是否考慮將“已刪除”布爾標誌添加到表中,或者改為“已刪除”時間戳。
或者更好的是,拒絕 CRUD 訪問您的數據庫表並在您的事務 API 中處理審計跟踪 :)