[pgsql-jp: 30178] Serial型の列とトランザクション
cdb01160
cdb01160 @ hkg.odn.ne.jp
2003年 6月 17日 (火) 19:42:51 JST
佐藤です。
create table tb (
id serial,
int integer check ( int>10 ),
txt text
);
に
insert into tb ( int,txt ) values ( 9, 'abc' );
とすると、チェック制約が働いて、行挿入に失敗します。
ところが、serial 型に付いている シーケンサーは、
数を進めてしまうようで、次に
insert into tb (int,txt) values ( 11, 'abc' );
を行うと、
select * from tb;
2 11 abc
が、返ってきます。
初めの誤った挿入をbegin、rollback で囲んだ
トランザクションにしてやっても、
シーケンサーは、数を進めてしまいます。
ちょっと困った感じなのですが、
制約等の制限で挿入ができなかった時は、シーケンサーを進めない、
あるいは、元に戻す方法は無いのでしょうか?
「トランザクション」に期待してはだめなのでしょうか?
よろしくお願いします。
以上 佐藤賢治
pgsql-jp メーリングリストの案内