質問

こんにちはPostgreSQLサーバーのための単純な監査トリガーを開発するためにアップしています。このドキュメントによると、それがどのように機能するかをほとんど理解しています。しかし、私は特定の行が更新されたときにのみ自分の活動を録音したいです。以下はリンクからのコードです。そして、どの行が更新されていても更新があったときに記録します。

    IF (TG_OP = 'UPDATE') THEN
...
.

上記のコードに条件を付ける方法を教えてください。ありがとう!

役に立ちましたか?

解決

トリガはPL / PGSQLで書かれています。 pl / pgsql manual を勉強することを強くお勧めします。 PL / PGSQLコードを変更するには。

トリガーでは、行データはOLDNEWにあります(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;
.

NEWOLDの両方が、名前が関心のある名前から/に変更されている場合にテストされています。

この場合は、WHENCREATE TRIGGER句を使用するように変更できます。監査の条件が満たされていない限り、トリガーをまったく発射することはありません。

WHEN句。

これは単なる基本的なプログラミングの問題です。それを使用するためにプログラミング言語を学ぶ必要があるでしょう。

関連項目 PG 9.1の更新トリガーの更新トリガー。

ああ、NULLについて考えることを忘れないでください。 NULL = 'anything'NULLを覚えておいてください。 「これらのことが等しい、またはnullの両方のもの」と言いたい場合はIS DISTINCT FROMを使用してください。

他のヒント

PostgreSQLドキュメントから

CREATE TRIGGER log_update
    AFTER UPDATE ON accounts
    FOR EACH ROW
    WHEN (OLD.* IS DISTINCT FROM NEW.*)
    EXECUTE PROCEDURE log_account_update();
.

このテーブルの更新のためにのみ機能します。挿入と削除の場合は、照会がないと同じように使用できます。これが他人を助けることを願っています。

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