PostgreSQLでINSERTした時のserial値を取得する方法 †INSERTした時にインクリメントされる、serial not null primary keyで指定したカラム値は、SELECT LASTVAL();で取得できます。 テスト環境など †PostgreSQLのバージョンと作成したテーブルを以下に記します。 PostgreSQLバージョン †sakuradb=> select version(); version ------------------------------------------------------------------------------------------------------- PostgreSQL 9.4.9 on armv7l-unknown-linux-gnueabihf, compiled by gcc (Raspbian 4.9.2-10) 4.9.2, 32-bit (1 row) 作成したテストテーブル †CREATE TABLE tbl (id serial not null primary key, txt text); テスト環境 †2つのクライアントから作成したtblテーブルを操作します。 2つのクライアントから操作してみる †1つのPostgreSQLサーバに2つのクライアント(psqlフロントエンドを使用)を接続し、INSERTを発行してみます。 上記のテスト環境にする記した通り、AとBの2つのクライアントがPostgreSQLに接続しています。
上記を見るとわかるように、各クライアント側でINSERTした最後の値が LASTVAL() 関数で返却されているのが確認できます。 BEGIN COMMIT ROLLBACK を使用してみた場合の動作 †以下にBEGIN COMMIT ROLLBACKを使用した実行例を記します。
上記の結果を見ると ROLLBACKしたINSERTは破棄され、LASTVALも登録されずインクリメントされているのが確認できます。 上記手順後にSELECT * した時の出力です。 sakuradb=> SELECT * FROM tbl; id | txt ----+------ 2 | B-01 3 | A-02 以上、serial用に採番された値を取得するLASTVAL()の動作についてでした。 |