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