無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

37.1. イベントトリガ動作の概要

イベントトリガは、関連づけられたイベントが、定義されたデータベースで起こるたびに実行されます。現在の所サポートされているイベントは、 ddl_command_start ddl_command_end sql_drop です。 今後のリリースで新たなイベントが追加されるかもしれません。

ddl_command_start イベントは、 CREATE ALTER DROP コマンドの実行の前に発生します。影響するオブジェクトが存在するかどうかのチェックはイベントトリガが実行されるまで行われません。 しかしながら例外として、共有オブジェクト — データベース、ロール、テーブルスペース — を対象としているDDLコマンド、もしくは、イベントトリガ自体をターゲットにしたコマンドにに対してのイベントは起こりません。 ddl_command_start はまた、 SELECT INTO コマンドの実行後にも発生します。このコマンドは CREATE TABLE AS コマンドと同等だからです。

ddl_command_end イベントは、ddl_command_startイベントが対象とする同様のコマンドの実行後に発生します。

sql_drop イベントは、データベースオブジェクトを削除する命令に対する ddl_command_end イベントトリガの直前に発生します。削除されたオブジェクトを一覧として出力するために、 sql_drop イベントトリガコード( 項9.28 を参照してください)から pg_event_trigger_dropped_objects() という集合を返す関数を使用します。トリガはオブジェクトがシステムカタログから削除された後に実行されるため、以後、そのオブジェクトを見ることができないことに注意してください。

イベントトリガは(他の関数のように)中断したトランザクションでは実行されません。従って、DDLコマンドがエラーで失敗した場合、関連する ddl_command_end トリガは実行されません。逆に、もし ddl_command_start トリガがエラーで失敗した場合、他のイベントトリガは起動されず、コマンド自体も事項されません。同様に、もし ddl_command_end トリガがエラーで失敗した場合、それ を含むトランザクションが失敗した場合のようにDDL文はロールバックされます。

イベントトリガでサポートされているコマンドの一覧は、 項37.2 を参照してください。

イベントトリガを作成するために、まず特別な型 event_trigger を返す関数を作る必要があります。この関数は値を返す必要はありません。というのも、その戻り値型は単にシグナルとして、その関数がイベントトリガを呼び出していること示しているだけだからです。

特定のイベントに対して複数のイベントトリガが定義された場合、トリガ名のアルファベット順で起動されます。

トリガ定義は WHEN 条件で特定されます。そのため、例えば ddl_command_start トリガはユーザが望む特定のコマンドのみを契機に実行させることができます。このようなトリガの一般的な使い方として、ユーザが実行するかもしれないDDL文の範囲を狭めることができます。


powered by SEO.CUG.NET