[pgsql-jp: 28327] Re: データ可視性について(解決)
Makoto, Yui
yuin @ bb.din.or.jp
2002年 12月 15日 (日) 00:20:16 JST
油井です。
すいません、以前ポストした問題ですが、自己解決しました。
単なる勘違いがあっただけでした(汗
after updateでも、トリガを呼び出したタプルは、
trigdata->tg_trigtupleではなく、
trigdata->tg_newtupleに入ってるんですね。
beforeなら、それですぐ納得だったのですが、先入感で勘違い。
適当にテスト作るか、plpgsqlのソースでも読めばよいことでした。
CREATE TABLE emp (
empname text,
salary integer,
last_date timestamp,
last_user text
);
CREATE or REPLACE FUNCTION emp_stamp () RETURNS TRIGGER AS '
BEGIN
RAISE NOTICE ''empname:% salary:% last_date:% last_user:%'',
new.empname,new.salary,new.last_date,new.last_user;
RETURN NEW;
END;
' LANGUAGE 'plpgsql';
drop trigger emp_stamp ON emp;
CREATE TRIGGER emp_stamp AFTER INSERT OR UPDATE ON emp
FOR EACH ROW EXECUTE PROCEDURE emp_stamp();
create or replace function test_emp() returns bool as'
BEGIN
RAISE NOTICE ''test_emp enter'';
insert into emp values(''aaa'',1,now(),''bbb'');
update emp set empname = ''aaaaaaaa'';
RAISE NOTICE ''test_emp exit'';
return TRUE;
END;
' LANGUAGE 'plpgsql';
select test_emp();
...何も問題なし(^^;
BTW,
SPIと7.3から出来たSRF(Set Return Function)を組み合わせた例で、
サーバ側で動的に作ったSQL文を評価する関数を以前作りました。
http://myin.org/tmp/eval_sql.c
http://myin.org/tmp/eval.tar.gz
select * from eval('select id,kind from xml_node'::text) as t1(id char,kind int2);
みたいな感じです。phpのeval関数みたいなイメージで。
あまり使うもんでもないですが(というかかなり特殊な状況下でなければ使わない)、
SPIの質問は、たまにMLに流れてるようなので、暫く晒しておきます。
+-------------------------------------------------------------------+
Makoto, Yui <yuin @ bb.din.or.jp>
Key fingerprint = 6462 E285 97D8 1323 40C4 F9E5 EB0F 9DE6 1713 219E
+-------------------------------------------------------------------+
pgsql-jp メーリングリストの案内