[pgsql-jp: 33695] Re: UPDATEのTrigger 内で発行したInsert がwait

ISHIDA Akio iakio @ mono-space.net
2004年 7月 16日 (金) 21:54:13 JST


こんにちは。石田@苫小牧市です。

白神 正雄 wrote:
> はじめまして。
> 白神といいます。
(中略)
> 前置きが長くなりましたが・・・
> ===【質問】==========================================
> [質問1] ・・・上記(c)の処理について
> Updateのトリガー関数(C言語)から、別テーブルにInsertしているのに
> Insertがwaitになるのは、原因としてどういったことが考えられるでしょうか?
> MVCCが狂ってしまわれたのでしょうか・・・?
> ※明示的にロックをかけるようなことはしていません。
> 
> 
> [質問2] ・・・上記(d)の処理について
> Postgresでは、トリガー関数(C言語)内で、トリガーを起こしたテーブルの
> 同じ行(の同じフィールド)を更新することはできるのでしょうか?
> 実現するために何か特別なことをしなければいけないのでしょうか?
> ※トリガーを発生元のTuppleを書き換えるとか。
>   現状、関数呼び出し時に取得したTuppleをそのまま返してます。
> ===================================================
> 

[質問2]については、
triggerdata->tg_newtupleをSPI_modifytuple()で書き換えることで
できるはずです。(やったことはないですが)。

参考になるのは、
http://www.postgresql.jp/document/pg743doc/html/triggers.html
だと思います。また、http:
//www.postgresql.jp/document/pg743doc/html/trigger-example.html
の最後にも書かれていますが、
src/test/regress/regress.cとcontrib/spiにもサンプルがあるようです。




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