[pgsql-jp: 38182] Re: RULE〜ON INSERT と serial 型
OOMURA,Kazuya
kzymr @ nifty.com
2007年 3月 21日 (水) 00:52:46 JST
こんばんは。
大村と申します。
無理矢理ですが、、、
CREATE OR REPLACE RULE rule_src2dst_ins AS ON INSERT TO src
DO (
select setval('src_id_seq', currval('src_id_seq')-3) where NEW.id <> NEW.id;
insert into dst values(NEW.id, NEW.val)
);
> kawatest=# INSERT INTO src VALUES ( 100, 'WORLD' );
とした場合、NEW.idは100ですのでsetvalは実行されません。
また、
> hoge=# INSERT INTO src ( val ) VALUES ( 'HELLO' );
は、
INSERT INTO src ( id, val ) VALUES ( nextval('src_id_seq'), 'HELLO' );
なので、RULE中のNEW.idは、nextval('src_id_seq')に置き換えらるようです。
RULEの中で正味3回nextvalが呼び出されることになりますので、currvalから
3を引いた値をsetvalしています。
src_id_seqの操作を並行して行うとうまく動かないかもしれませんね。
--
大村一哉
kzymr @ nifty.com
pgsql-jp メーリングリストの案内