[pgsql-jp: 29891] Re: INSERTで作成したカラムのSERIAL 値の取り出し方

Hiroki Takada hi-takada @ k5.dion.ne.jp
2003年 5月 15日 (木) 06:28:11 JST


高田ともうします。

こんにちは。

> INSERT INTO member (name) VALUES('Ryo');
> などとすれば「Ryo」さんが登録されて id に顧客番号が自動的に振られるのを期待
> できると思います。
> では、このSERIALの値はどのように取得すればいいのでしょうか?

SELECT currval('シーケンス名');

で取得できます。この例だと、

SELECT currval('member_id_seq');

となります。

> INSERTのTIMESTAMPを記録しておく方法も考えましたが、もし他のクライアントから
> 同時に登録処理が起きた場合(無いとは思いますが・・・)致命的なバグになってし
> まいます。

currval は現在のセッションにおいて、 最後に実行された nextval の値が
保存されているので、他のセッションで member テーブルにレコードが追加
されたかどうかをケアする必要がありません。



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