他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

6.4. 更新された行のデータを返す

行が更新されるときに、その行のデータを取得できると便利なことがあります。 INSERTUPDATEDELETEの各コマンドは、いずれもオプションのRETURNING句によりそれが可能となっています。 RETURNINGを使うことで、行を取得するために余分なデータベースへの問い合わせを行うことを避けられ、それ以外の方法で更新された行を確実に特定するのが難しい場合には、これは特に貴重です。

RETURNING句で使用できる項目はSELECTコマンドの出力リスト(7.3参照)と同じです。 コマンドの対象となっているテーブルの列名、あるいはそれらの列を使った値の式を入れることができます。 よく使われる省略記法はRETURNING *で、これは対象テーブルのすべての列を順に返します。

INSERTでは、RETURNINGで利用できるデータは、挿入された通りの行です。 単純な挿入では、クライアントが提供したデータを単に繰り返すだけになりますから、あまり役には立ちません。 しかし、計算されたデフォルト値に依存しているときは、これは非常に便利なことがあります。 例えばserialの列を使って一意識別子を提供している場合、以下のようにRETURNINGによって、新しい行に割り当てられたIDを返すことができます。

CREATE TABLE users (firstname text, lastname text, id serial primary key);

INSERT INTO users (firstname, lastname) VALUES ('Joe', 'Cool') RETURNING id;

また、RETURNING句はINSERT ... SELECTでも非常に役に立ちます。

UPDATEでは、RETURNINGで利用できるデータは、更新された行の新しい内容です。 例を示します。

UPDATE products SET price = price * 1.10
  WHERE price <= 99.99
  RETURNING name, price AS new_price;

DELETEでは、RETURNINGで利用できるデータは、削除された行の内容です。 例を示します。

DELETE FROM products
  WHERE obsoletion_date = 'today'
  RETURNING *;

対象のテーブルにトリガー(第39章)がある場合、RETURNINGで利用できるデータは、トリガーで更新された行です。 従って、トリガーによって計算された列を検査するのもRETURNINGの一般的な利用方法の一つです。