PostgreSQLが提供するCREATE TRIGGERに加え、DOオプションを指定して新しいトリガを定義できます。
記述形式
CREATE [ OR REPLACE ] [ CONSTRAINT ] TRIGGER name { BEFORE | AFTER | INSTEAD OF } { event [ OR ... ] }
ON table_name
[ FROM referenced_table_name ]
[ NOT DEFERRABLE | [ DEFERRABLE ] [ INITIALLY IMMEDIATE | INITIALLY DEFERRED ] ]
[ REFERENCING { { OLD | NEW } TABLE [ AS ] transition_relation_name } [ ... ] ]
[ FOR [ EACH ] { ROW | STATEMENT } ]
[ WHEN ( condition ) ]
{ EXECUTE { FUNCTION | PROCEDURE } function_name ( arguments )
| DO [ LANGUAGE lang_name ] code }
説明
CREATE TRIGGERについては、“PostgreSQL Documentation”の“Server Programming”の“Triggers”を参照してください。ここでは、DOオプションについて説明します。
DOオプションを使用して作成されたトリガは、指定したテーブルまたはビューと関連付けられ、特定のイベントが発生した時に、指定されたDO(無名コードブロック)の手続き言語で書かれたコードブロックを実行します。
パラメータ
関数を実装している言語の名前です。CREATE TRIGGERとしてplpgsqlをサポートしています。
特定のイベントが発生した時に、指定した手続き言語で書かれたコードブロックを実行します。無名コードブロックは、関数のように事前に定義する必要がありません。作成方法は、各手続き言語のトリガプロシージャの作成方法に従います。
注意
DOオプションを指定したトリガは、EXECUTE PROCEDUREを指定したトリガにREPLACEすることはできません。
EXECUTE PROCEDUREを指定したトリガは、DOオプションを指定したトリガにREPLACEすることはできません。
使用例
accountsテーブルの行が更新される直前にDOで指定した手続き言語で書かれたコードブロックを実行します。
(LANGUAGEがplpgsqlの場合の例)
CREATE TRIGGER check_update BEFORE UPDATE ON accounts FOR EACH ROW DO $$BEGIN RETURN NEW; END;$$ ;
参考
DOオプションを指定してトリガが作成された場合、内部的に『“スキーマ名”.”on表名”_”トリガ名”_TRIGPROC(通番)』という関数が定義されます。