PostgreSQL で直前に使ったシーケンス値を取得する currval 関数
2008年 4月 22日 00:45よくあるパターンですが、あるテーブルを INSERT した直後に、関連するテーブルにもデータを INSERT する必要があって、最初に INSERT したテーブルのキー項目の値が取りたいんだけど、そのキー項目はシーケンスで設定している。みたいな場合の話です。
currval 関数を使って次のような感じにできます。
-- データを INSERT
INSERT INTO hoge (hoge_no, hoge_text) VALUES (nextval('hoge_no_seq'), 'ほげげ');
-- 直前のシーケンス値を取得
SELECT currval('hoge_no_seq');
currval 関数は同一セッション中で設定された直前のシーケンス値を返すことを保証しているので、他のプログラムからも nextval がガンガン使われているような環境でも、しっかり直前の値を返してくれるところがポイントだったりします。
とりあえず、そんなところで。
