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