PostgreSQL RETURNING
INSERT/UPDATE/DELETE実行時に対象行を返却 RETURNING
SQL
--更新された行を返す
INSERT INTO foo VALUES (100001, 'リンゴ', 1, true) RETURNING *;
UPDATE foo SET foo_name = 'バナナ' WHERE foo_id = 100001 RETURNING *;
DELETE FROM foo WHERE foo_id = 100001 RETURNING *;
--更新された行の指定カラムを返す
INSERT INTO foo VALUES (100001, 'リンゴ', 1, true) RETURNING foo_id;
RETURNING有り
pgdb=# INSERT INTO foo VALUES (100001, 'リンゴ', 1, true) RETURNING *;
foo_id | foo_name | foo_category | foo_flg
--------+----------+--------------+---------
100001 | リンゴ | 1 | t
(1 行)
pgdb=# UPDATE foo SET foo_name = 'バナナ' WHERE foo_id = 100001 RETURNING *;
foo_id | foo_name | foo_category | foo_flg
--------+----------+--------------+---------
100001 | バナナ | 1 | t
(1 行)
pgdb=# DELETE FROM foo WHERE foo_id = 100001 RETURNING *;
foo_id | foo_name | foo_category | foo_flg
--------+----------+--------------+---------
100001 | バナナ | 1 | t
(1 行)
pgdb=# INSERT INTO foo VALUES (100001, 'リンゴ', 1 , true) RETURNING foo_id;
foo_id
--------
100001
(1 行)
RETURNING無し(通常)
pgdb=# INSERT INTO foo VALUES (100001, 'リンゴ', 1, true);
INSERT 0 1
8.2から利用可能、それ以前はINSERT/UPDATEの後にSELECTして対象行を取得していた。