ページの先頭行へ戻る
Enterprise Postgres 10 アプリケーション開発ガイド
FUJITSU Software

8.1.1 CREATE TRIGGER

PostgreSQLが提供するCREATE TRIGGERに加え、OR REPLACEオプションおよび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 } }
    [ FOR [ EACH ] { ROW | STATEMENT } ]
    [ WHEN ( condition ) ]
    { EXECUTE PROCEDURE function_name ( arguments ) | DO [ LANGUAGE lang_name ] code }

説明

CREATE TRIGGERについては、“PostgreSQL 文書”の“サーバプログラム”の“トリガ”を参照してください。ここでは、OR REPLACEオプションおよびDOオプションについて説明します。

OR REPLACEオプションおよびDOオプションを使用して作成されたトリガは、指定したテーブルまたはビューと関連付けられ、特定のイベントが発生した時に、指定された関数function_nameまたはDO(無名コードブロック)の手続き言語で書かれたコードブロックを実行します。

パラメータ

OR REPLACE

指定したトリガがテーブルに対して未定義の場合、新規にトリガを定義します。
指定したトリガがテーブルに対して定義済みの場合、指定したトリガの定義内容に置換します。

lang_name

関数を実装している言語の名前です。CREATE TRIGGERとしてplpgsqlをサポートしています。

code

特定のイベントが発生した時に、指定した手続き言語で書かれたコードブロックを実行します。無名コードブロックは、関数のように事前に定義する必要がありません。作成方法は、各手続き言語のトリガプロシージャの作成方法に従います。


注意

  • 通常のトリガとして定義されたトリガに対して、制約トリガでREPLACEすることはできません。

  • 制約トリガとして定義されたトリガに対して、通常のトリガでREPLACEすることはできません。

  • 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(通番)』という関数が定義されます。