ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

PostgreSQLでシリアル型の次の値を取得する方法

PostgreSQLで、インサートした後のシリアル型のカラムの値を取得するには、シーケンスとして定義されている値を

SELECT nextval('test_table_id_seq');

で取得しいます。
取得した値が10だったら、

INSERT INTO test_table (test_table_id, item1) VALUES(10, 'ABC');

として、テーブルへのインサートに利用しています。

別の方法はないのか?

この方法で十分ですが、やっていることは、インサートした後のシリアル型のカラムの値の取得ではなく、インサート前に次のシリアル型のカラムの値を決めて、インサートに利用しているのが、なんか釈然としない気持ちがありました。
この方法以外無いのかと思い調べてみたら、別の方法がありました。

別の方法

まず、シリアル型のカラムの値を除いてインサートします。

INSERT INTO test_table (item1) VALUES('ABC');

その後、シーケンスとしての定義から、

SELECT last_value FROM test_table_id_seq;

とすれば、インサートした後の値が取得できます。


今回知った方法のほうが、今まで知っていた方法より、納得できました。