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