質問

私は呼ばれる小さな(〜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の監査トレイルを処理します:)

ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top