[pgsql-jp: 29008] Re: トリガプロシジャーについて
Makoto,Yui
yuin @ bb.din.or.jp
2003年 2月 11日 (火) 19:13:50 JST
油井です。
On Mon, 10 Feb 2003 13:11:57 +0900
TFL)久村 孝之 <hisamura.takayuki @ tfl.fujitsu.com> wrote:
> テーブルの更新後にトリガを使用して、自作のC言語関数を呼び出している
> のですが、このときC言語関数に更新行のデータを渡すことは可能でしょう
> か。
可能です。
> マニュアルは以下を参照しました。
> http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/triggers.html
There are more complex examples in src/test/regress/regress.c and in contrib/spi.
らしいです。ソースみた方が早いと思うので書くまでもないかも知れませんが...
-----------------------------------------------------
trigtuple = trigdata->tg_newtuple;
rel = trigdata->tg_relation;
tupdesc = rel->rd_att;
trigger = trigdata->tg_trigger;
args = trigger->tgargs;
/* Connect to SPI manager */
SPI_connect();
for( i=0;i<4;i++){
/* get index of column in tuple */
int attnum = SPI_fnumber(tupdesc, args[i]);
/* Well, the string value of attribute */
a_vals[i] = SPI_getvalue(trigtuple, tupdesc, attnum);
// or (int) DatumGetInt64(SPI_getbinval(... etc
<snip>
------------------------------------------------------
な感じです。
この例トリガで呼び出す関数の引数を指定した場合のもの、です。
> #TriggerData構造体をこのような用途に使うことが、この構造体が用意さ
> れているの意図と異なっているような気もしますが。
他に何かあったでしょうか??
+-------------------------------------------------------------------+
Makoto, Yui <yuin @ bb.din.or.jp>
Key fingerprint = 6462 E285 97D8 1323 40C4 F9E5 EB0F 9DE6 1713 219E
+-------------------------------------------------------------------+
pgsql-jp メーリングリストの案内