[pgsql-jp: 37367] Re: 挿入したデータのserial値を取得する方法

Yoshiaki Kawazu kawaz-pgsql-jp=sra.co.jp @ 7cho-me.com
2006年 7月 28日 (金) 19:35:07 JST


河津です。

>> select currval('test1_id_seq');
> 
> この方法だとデータの追加からselectまでの間、テーブルをロックしないといけ
> ませんよね。私の作っているものではデータの追加がほぼ同時に起こることはな
> いので問題ありませんが、一応そういうことも考えないといけないかと思うのです。

currval はシーケンスの現在の値を返す関数ではなく、
現在のセッション内で最後に実行されたnextvalで得られた値を返すものです。
また、nextval は決してシーケンスの値をロールバックしません。
ですので INSERT 後に同じセッションで select currval('test1_id_seq') を
実行すればロックを必要とするような問題もなく、
素直に INSERT したレコードの id が取得できることが保障されます。

--
Yoshiaki Kawazu <kawaz @ kawaz.jp>



pgsql-jp メーリングリストの案内