Postgres監査トリガーは1行の更新でのみ発生します
-
20-12-2019 - |
質問
こんにちはPostgreSQLサーバーのための単純な監査トリガーを開発するためにアップしています。このドキュメントによると、それがどのように機能するかをほとんど理解しています。しかし、私は特定の行が更新されたときにのみ自分の活動を録音したいです。以下はリンクからのコードです。そして、どの行が更新されていても更新があったときに記録します。
IF (TG_OP = 'UPDATE') THEN
...
.
上記のコードに条件を付ける方法を教えてください。ありがとう!
解決
トリガはPL / PGSQLで書かれています。 pl / pgsql manual を勉強することを強くお勧めします。 PL / PGSQLコードを変更するには。
トリガーでは、行データはOLD
とNEW
にあります(UPDATE
トリガー用)。それで、あなたはそれ以外のもののようなIF
テストを行うことができます。 e.g。:
IF (TG_OP = 'UPDATE') THEN
IF NEW."name" = 'name_to_audit' OR OLD."name" = 'name_to_audit' THEN
-- do audit commands
END IF;
END IF;
.
NEW
とOLD
の両方が、名前が関心のある名前から/に変更されている場合にテストされています。
この場合は、WHEN
でCREATE TRIGGER
句を使用するように変更できます。監査の条件が満たされていない限り、トリガーをまったく発射することはありません。
WHEN
句。
他のヒント
PostgreSQLドキュメントから
:
CREATE TRIGGER log_update
AFTER UPDATE ON accounts
FOR EACH ROW
WHEN (OLD.* IS DISTINCT FROM NEW.*)
EXECUTE PROCEDURE log_account_update();
.
このテーブルの更新のためにのみ機能します。挿入と削除の場合は、照会がないと同じように使用できます。これが他人を助けることを願っています。
所属していません StackOverflow