Postgresql

觸發器:將刪除的行移動到存檔表

  • December 28, 2011

我在我的 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 中處理審計跟踪 :)

引用自:https://dba.stackexchange.com/questions/2531