CREATE TRIGGER

Name

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

Synopsis

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

入力

name

作成するトリガの名前です。

table

テーブルの名前です。

event

INSERT、DELETE または UPDATE のいずれかです。

funcname

ユーザ定義の関数です。

出力

CREATE

トリガが正常に作成されたときに戻るメッセージです。

説明

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

トリガは、タプルへの操作が開始される前(制約条件のチェックと INSERT、UPDATE または DELETE が行われる前)、あるいは操作が 開始された後(制約条件がチェックされ INSERT、UPDATE または DELETE が完了した後)の前後いずれでも起動を指定することが出来ます。 イベントの前にトリガが起動すると、そのトリガは指定した タプルにたいする操作を省略することも、(INSERT と UPDATE の操作時 のみ)挿入されたタプルを変更することもできます。 イベントの後にトリガが起動すると、最終の挿入、更新あるいは 削除を含んだ全ての変更がトリガに"可視"となります。

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

注意事項

CREATE TRIGGERPostgres の拡張言語です。

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

現在のリリース (v6.4) 時点で、 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 は ありません。

上の二番目の例は 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  
);
    

とはいっても、外部キーは (6.4 時点で)未だ Postgres に実装されていません。