プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
PostgreSQL、insert時のserial値を取得
要はテーブルAにinsert、そのAのプライマリキーを
テーブルBにinsert、みたいな事をやりたかったのです。
ほんでもってテーブルAのプライマリキーはserial型で自動採番。

さて、どーやってテーブルAにinsertした時のプライマリキー取れば良いの?
ってのが事の発端でした。
さぁ、どーする?

結論から言えば

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

で取得できます。

currval()では同一セッション中で直前に設定されたシーケンス値を取得できるので
insert直後に上記を実行すれば取得可能。
しかも「同一セッション中で」なので、排他だとかなんだとかも考えなくていーみたい。
こりゃ知っておいて損は無いですね。

ちなみに

SELECT last_value FROM シーケンス名;

だとか

SELECT MAX(プライマリキー) FROM テーブルA

とかだと、セッション関係無く現在のものが返るので、
要は複数人で同じタイミングでやるとおかしなことになりうるので
排他制御を考える必要が出てきます。
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:● PostgreSQL  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト 

back | HOME |