• ..

Postgresql

    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