2011.
05.
03
12:38:49
要はテーブルAにinsert、そのAのプライマリキーを
テーブルBにinsert、みたいな事をやりたかったのです。
ほんでもってテーブルAのプライマリキーはserial型で自動採番。
さて、どーやってテーブルAにinsertした時のプライマリキー取れば良いの?
ってのが事の発端でした。
さぁ、どーする?
結論から言えば
SELECT currval('シーケンス名');
で取得できます。
currval()では同一セッション中で直前に設定されたシーケンス値を取得できるので
insert直後に上記を実行すれば取得可能。
しかも「同一セッション中で」なので、排他だとかなんだとかも考えなくていーみたい。
こりゃ知っておいて損は無いですね。
ちなみに
SELECT last_value FROM シーケンス名;
だとか
SELECT MAX(プライマリキー) FROM テーブル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 ササキマコト