• 追加された行はこの色です。
  • 削除された行はこの色です。
* ストアドファンクション・トリガー [#zd1cb73c]
* トリガプロシージャの作成 [#zd1cb73c]

** ファンクション作成言語の確認とインストール [#oee2e65d]
*** 確認 [#n41c706d]
 select * from pg_language;
*** インストール [#pc86f10b]
シェルで。
 createlang -h 127.0.0.1 -d mydb -U taro plpgsql

** ファンクション作成 [#r6288b1d]
 DROP FUNCTION myfunc();
 CREATE FUNCTION myfunc() RETURNS TRIGGER AS
 '
 DECLARE ts TIMESTAMP;
 BEGIN
    ts = ''now'';
    INSERT INTO t2 VALUES (new.val, ts);
    RETURN new;
 END;
 '
 LANGUAGE 'plpgsql'
 ;

** トリガー作成 [#oe5cd297]
 DROP TRIGGER mytrigger ON t1;
 CREATE TRIGGER mytrigger
   BEFORE INSERT OR UPDATE ON t1 FOR EACH ROW
   EXECUTE PROCEDURE myfunc()
 ;

これでテーブルT1にトリガーが設定された。T1に1件インサートすると、その値とその時の日付がテーブルT2に記録される。

** 確認 [#wb2b0960]

 SELECT * FROM t1;

  val
 -----
 (0 行)

 INSERT INTO t1 VALUES ( 100 );

 SELECT * FROM t2;

  val |           ctime
 -----+----------------------------
  100 | 2011-12-31 13:11:48.050969
 (1 行)

** 参考 [#vec7a6f1]
http://www.postgresql.jp/document/9.1/html/plpgsql.html


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS