insert 時に作ったレコードを返す

これはinsertでレコードを追加した後にselect ... limit 1をせずに一度に終わらせるものです。

確認用の準備

以下のようにfooテーブルを作っておきます。

postgres=# create table foo (id serial primary key not null, text text not null);
CREATE TABLE

実際に確認

まず、普通にinsertした時はこうなります。「1件追加しました」という情報だけ返っています。

postgres=# insert into foo (text) values ('hoge');
INSERT 0 1

returning を使う

ですが、後ろにreturning *を追加すると今入れたレコードが返るようになります。

postgres=# insert into foo (text) values ('fuga') returning *;
 id | text
----+------
  2 | fuga
(1 row)

INSERT 0 1

*select ...のカラム指定と同じように指定できます。したがって、カラム名を指定すればそれだけを返すようにできます。

postgres=# insert into foo (text) values ('piyo') returning text;
 text
------
 piyo
(1 row)

INSERT 0 1