私のPostgreSQLデータベースには、restrictions
という小さな(約10行)テーブルがあり、値は毎日削除され、挿入されます。
restrictions_deleted
と呼ばれるテーブルが必要です。restrictions
から削除されるすべての行は自動的に保存されます。 restrictions
にはシリアルIDがあるため、重複はありません。
PostgreSQLでこのようなトリガーを作成するにはどうすればよいですか?
削除する前に、古いデータを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;
別のアプローチを受け入れる場合は、テーブルに「削除済み」ブールフラグまたは「deleted_at」タイムスタンプを追加することを検討しましたか?.
または、データベーステーブルへのCRUDアクセスを拒否し、トランザクションAPIで監査証跡を処理します。