トリガー
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 元のコマンドに加えてこのコマンドが実行される。(デフォルト)
- イベント
- CREATE RULE ルール名 AS ON イベント TO テーブル/ビュー名 DO 元の処理の扱い { 実行するSQL文 | NOTHING };
- 削除
- DROP RULE ルール名 ON テーブル/ビュー名;
- 変更
- ALTER RULE ルール名 ON テーブル/ビュー名 RENAME TO 新しいルール名;
特定のSQL文に対して指定したSQL文への置き換えを定義することができる。
ビューを使用する際に利用している仕組みである。
更新条件を満たさないビューやビューの元になるテーブルに対し、更新処理を可能にする。