PostgreSQL トリガー、ルール

トリガー

https://www.postgresql.jp/document/11/html/sql-createtrigger.html
https://www.postgresql.jp/document/11/html/sql-droptrigger.html
https://www.postgresql.jp/document/11/html/sql-altertrigger.html

  • 作成
    • CREATE TRIGGER トリガー名 { BEFORE | AFTER | INSTEAD OF } { INSERT | UPDATE | DELETE | TRUNCATE } ON テーブル名 [ FOR [ EACH ] { ROW | STATEMENT } ] EXECUTE { FUNCTION | PROCEDURE } 関数名([引数]);
  • 削除
    • DROP TRIGGER トリガー名 ON テーブル名;
  • 変更
    • ALTER TRIGGER トリガー名 ON テーブル名 RENAME TO 新しいトリガー名;

特定のテーブルへ挿入・更新・削除処理が行われたタイミングで、指定した関数の呼び出しを定義することができる。
イベントは、ORを使用することで複数指定できる。
影響範囲の設定は、対象テーブルの行ごとの更新に対してトリガーの実行を行うものと、SQLごとの更新に対してトリガーの実行を行うものの2種類がある。
テーブルの行ごとの更新ではなく、処理(SQL)ごとの更新に対して実行する場合は、影響範囲にFOR EACH STATEMENTを指定するか、オプションを省略する。

ルール

https://www.postgresql.jp/document/11/html/sql-createrule.html
https://www.postgresql.jp/document/11/html/sql-droprule.html
https://www.postgresql.jp/document/11/html/sql-alterrule.html

  • 作成
    • CREATE RULE ルール名 AS ON イベント TO テーブル/ビュー名 DO 元の処理の扱い { 実行するSQL文 | NOTHING };
      • イベント
        • SELECT、INSERT、UPDATE、DELETE
      • 元の処理の扱い
        • INSTEAD 元のコマンドの代わりにこのコマンドが実行される。
        • ALSO 元のコマンドに加えてこのコマンドが実行される。(デフォルト)
  • 削除
    • DROP RULE ルール名 ON テーブル/ビュー名;
  • 変更
    • ALTER RULE ルール名 ON テーブル/ビュー名 RENAME TO 新しいルール名;

特定のSQL文に対して指定したSQL文への置き換えを定義することができる。
ビューを使用する際に利用している仕組みである。
更新条件を満たさないビューやビューの元になるテーブルに対し、更新処理を可能にする。