トリガー:削除された行をアーカイブテーブルに移動します
-
16-10-2019 - |
質問
私は呼ばれる小さな(〜10行)テーブルを持っています restrictions
私のpostgreSQLデータベースでは、値が削除され、毎日挿入されています。
テーブルが電話をかけたいのですが restrictions_deleted
, 、どこから削除されるすべての行 restrictions
自動的に保存されます。以来 restrictions
シリアルIDがあり、重複はありません。
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の監査トレイルを処理します:)
所属していません dba.stackexchange