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