CREATE TRIGGER

Name

CREATE TRIGGER  --  新しいトリガを作成する。

Synopsis

CREATE TRIGGER name { BEFORE | AFTER } { event [OR ...] }
    ON table FOR EACH { ROW | STATEMENT }
    EXECUTE PROCEDURE func ( arguments )
  

入力

name

作成するトリガ名。 (訳注: The name of a trigger to be created として訳)

table

テーブル名。

event

INSERT、DELETE、UPDATE のいずれか。

funcname

ユーザ定義の関数。

出力

CREATE

トリガの作成に成功した場合に返されるメッセージ。

説明

CREATE TRIGGER は新しいトリガを現 在のデータベースに登録します。 トリガは relname リレーションと連係して、指定した funcname 関数を実行します。

トリガは、タプルへの操作が開始される (制約の検査と INSERTUPDATE または DELETE が行われる) 前 (BEFORE)、 あるいは操作が開始された (制約が検査され INSERTUPDATE または DELETE が完了した) 後 (AFTER)の、 前後いずれでも起動を指定することができます。 イベントの前にトリガが起動すると、そのトリガは現在の タプルに対する操作を省略することも、 (INSERTUPDATE の操作時のみ) 挿入されたタプルを変更することもできます。 イベントの後にトリガが起動すると、最終の挿入、更新あるいは 削除を含んだ全ての変更はトリガから "可視" 状態になります。

より詳細については、 PostgreSQL プログラマガイド の SPI と トリガの章を参照して下さい。

注意

CREATE TRIGGERPostgres の拡張言語です。

リレーションの所有者のみがそのリレーション上にトリガを 作成できます。

現在のリリース (v7.0) 時点で、 STATEMENT トリガは 実装されていません。

トリガの削除方法に関する情報については DROP TRIGGER を参照して下さい。

使用法

指定された distributor のコードが distributors テーブルに存在する かどうか、films テーブルに行を追加または更新する前にチェックします。

CREATE TRIGGER if_dist_exists
    BEFORE INSERT OR UPDATE ON films FOR EACH ROW
    EXECUTE PROCEDURE check_primary_key ('did', 'distributors', 'did');
   

distributor を消去するかまたはそのコードを更新する前に、 films テーブルに対する全ての参照を削除します。

CREATE TRIGGER if_film_exists 
    BEFORE DELETE OR UPDATE ON distributors FOR EACH ROW
    EXECUTE PROCEDURE check_foreign_key (1, 'CASCADE', 'did', 'films', 'did');
   

互換性

SQL92

SQL92 には CREATE TRIGGER は ありません。

上述の 2 番目の例は、次のように FOREIGN KEY 制約を使用して行なうこ ともできます。

CREATE TABLE distributors (
    did      DECIMAL(3),
    name     VARCHAR(40),
    CONSTRAINT if_film_exists
    FOREIGN KEY(did) REFERENCES films
    ON UPDATE CASCADE ON DELETE CASCADE  
);