CREATE EVENT TRIGGER — 新しいイベントトリガを定義する
CREATE EVENT TRIGGERname
ONevent
[ WHENfilter_variable
IN (filter_value [, ... ]) [ AND ... ] ] EXECUTE { FUNCTION | PROCEDURE }function_name
()
CREATE EVENT TRIGGER
は新しいイベントトリガを作成します。
指定されたイベントが発生し、トリガに関連するWHEN
条件がもしあればそれを満たす場合、トリガ関数が実行されます。
イベントトリガの一般的な紹介については、第39章を参照してください。
イベントトリガを作成したユーザがその所有者となります。
name
新しいトリガに付ける名前です。 この名前はデータベース内で一意でなければなりません。
event
指定関数を呼び出すきっかけとなるイベントの名前です。 イベント名の詳細については39.1を参照してください。
filter_variable
イベントをフィルタするために使用される変数の名前です。
これにより、サポートしている状況の一部に対してのみにトリガの発行を制限することができます。
現在filter_variable
でサポートされているものはTAG
のみです。
filter_value
どこでトリガを発行すべきかについて、関連するfilter_variable
用の値のリストです。
TAG
の場合、これはコマンドタグ(例えば'DROP FUNCTION'
)のリストを意味します。
function_name
引数を取らずevent_trigger
型を返すと宣言された、ユーザが提供する関数です。
CREATE EVENT TRIGGER
の構文では、キーワードFUNCTION
とPROCEDURE
は等価ですが、参照されている関数はどちらの場合でも関数でなければならず、プロシージャであってはなりません。
ここでキーワードPROCEDURE
を使うことは、歴史的なものであり廃止予定です。
スーパーユーザのみがイベントトリガを作成することができます。
シングルユーザモード(postgres参照)ではイベントトリガは無効になります。 エラーのあるイベントトリガが原因でデータベースの動作がおかしくなり、トリガを削除することもできない状態になった場合は、シングルユーザモードで再起動してください。 削除できるようになります。
すべてのDDLコマンドの実行を禁じます。
CREATE OR REPLACE FUNCTION abort_any_command() RETURNS event_trigger LANGUAGE plpgsql AS $$ BEGIN RAISE EXCEPTION 'command % is disabled', tg_tag; END; $$; CREATE EVENT TRIGGER abort_ddl ON ddl_command_start EXECUTE FUNCTION abort_any_command();
標準SQLにはCREATE EVENT TRIGGER
文はありません。