[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 メーリングリストの案内