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;
とすれば、インサートした後の値が取得できます。
今回知った方法のほうが、今まで知っていた方法より、納得できました。