[pgsql-jp: 33167] トリガについて

Kazuya Inaba kazuya @ tmksolutions.com
2004年 6月 8日 (火) 15:02:07 JST


稲葉と申します。

PostgreSQL 7.4.2を使用しています。

下記のようなテーブルがあり、
CREATE TABLE test1(
	id SERIAL PRIMARY KEY,
	Name TEXT NOT NULL,
	val1 INTEGER NOT NULL,
        id2 INTEGER NULL)

クライアントアプリから新規データとして、Name, val1, id2が送られて
来ますが、id2はNULLの場合があります。

 val1が0の場合にidに入れられたSERIAL値をid2へ入れたいのです。

トリガにて行おうと
CREATE FUNCTION setIDtoID2() RETURNS trigger AS '
  BEGIN
    IF new.val1=0 THEN
      UPDATE test1 SET id2=new.id WHERE id=new.id;
    END IF;
    RETURN NULL;
    END;
    ' LANGUAGE plpgsql;

CREATE TRIGGER setID2 AFTER INSERT OR UPDATE ON test1
    FOR EACH ROW EXECUTE PROCEDURE setIDtoID2();

と、したのですが、
  INSERT INTO test1(Name,val1,id2) VALUES('aa',0,NULL);

psqlで待ち状態になりSQL文が終了しません。

 トリガはAFTERなのでテーブルにINSERTされidにSERIAL値が入り、それを
使ってid2を更新するつもりで書いたのですが、動作しません。

 FUNCTIONに間違いがあるのか、こういうトリガ自体が出来ないのか
教えて下さい。

 又、他の方法で実現出来るのであれば教えて下さい。


=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Kazuya Inaba
mailto:kazuya @ tmksolutions.com
TEL: (604)298-6324
FAX: (604)298-6334
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=




pgsql-jp メーリングリストの案内