Sometimes it is useful to obtain data from modified rows while they are
being manipulated. The <command>INSERT</command>, <command>UPDATE</command>,
<command>DELETE</command>, and <command>MERGE</command> commands all have an
optional <literal>RETURNING</literal> clause that supports this. Use
of <literal>RETURNING</literal> avoids performing an extra database query to
collect the data, and is especially valuable when it would otherwise be
difficult to identify the modified rows reliably.
《マッチ度[89.655172]》行が更新されるときに、その行のデータを取得できると便利なことがあります。
INSERT
、UPDATE
、DELETE
の各コマンドは、いずれもオプションのRETURNING
句によりそれが可能となっています。
RETURNING
を使うことで、行を取得するために余分なデータベースへの問い合わせを行うことを避けられ、それ以外の方法で更新された行を確実に特定するのが難しい場合には、これは特に貴重です。
《機械翻訳》変更された行を操作しているときに、その行からデータを取得すると便利な場合があります。
INSERT
、UPDATE
、DELETE
、MERGE
の各コマンドには、これをサポートするオプショナルRETURNING
句があります。
RETURNING
を使用すると、データを収集するために余分なデータベースクエリを実行する必要がなくなり、変更された行を確実に識別することが困難な場合に特に役立ちます。
The allowed contents of a <literal>RETURNING</literal> clause are the same as
a <command>SELECT</command> command's output list
(see <xref linkend="queries-select-lists"/>). It can contain column
names of the command's target table, or value expressions using those
columns. A common shorthand is <literal>RETURNING *</literal>, which selects
all columns of the target table in order.
RETURNING
句で使用できる項目はSELECT
コマンドの出力リスト(7.3参照)と同じです。
コマンドの対象となっているテーブルの列名、あるいはそれらの列を使った値の式を入れることができます。
よく使われる省略記法はRETURNING *
で、これは対象テーブルのすべての列を順に返します。
In an <command>INSERT</command>, the data available to <literal>RETURNING</literal> is
the row as it was inserted. This is not so useful in trivial inserts,
since it would just repeat the data provided by the client. But it can
be very handy when relying on computed default values. For example,
when using a <link linkend="datatype-serial"><type>serial</type></link>
column to provide unique identifiers, <literal>RETURNING</literal> can return
the ID assigned to a new row:
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;
The <literal>RETURNING</literal> clause is also very useful
with <literal>INSERT ... SELECT</literal>.
また、RETURNING
句はINSERT ... SELECT
でも非常に役に立ちます。
In an <command>UPDATE</command>, the data available to <literal>RETURNING</literal> is
the new content of the modified row. For example:
UPDATE
では、RETURNING
で利用できるデータは、更新された行の新しい内容です。
例を示します。
UPDATE products SET price = price * 1.10 WHERE price <= 99.99 RETURNING name, price AS new_price;
In a <command>DELETE</command>, the data available to <literal>RETURNING</literal> is
the content of the deleted row. For example:
DELETE
では、RETURNING
で利用できるデータは、削除された行の内容です。
例を示します。
DELETE FROM products WHERE obsoletion_date = 'today' RETURNING *;
In a <command>MERGE</command>, the data available to <literal>RETURNING</literal> is
the content of the source row plus the content of the inserted, updated, or
deleted target row. Since it is quite common for the source and target to
have many of the same columns, specifying <literal>RETURNING *</literal>
can lead to a lot of duplicated columns, so it is often more useful to
qualify it so as to return just the source or target row. For example:
《機械翻訳》MERGE
では、RETURNING
で使用可能なデータは、ソース行プラスのコンテンツ、挿入、更新、または削除されたターゲット行のコンテンツです。
ソースとターゲットが多くの同じ列を持つことは非常に一般的であるため、RETURNING*
を指定すると、多くの重複した列が発生する可能性があります。
そのため、ソース行またはターゲット行だけを返すように修飾することがより有用であることが多いです。
例を示します。
MERGE INTO products p USING new_products n ON p.product_no = n.product_no WHEN NOT MATCHED THEN INSERT VALUES (n.product_no, n.name, n.price) WHEN MATCHED THEN UPDATE SET name = n.name, price = n.price RETURNING p.*;
If there are triggers (<xref linkend="triggers"/>) on the target table,
the data available to <literal>RETURNING</literal> is the row as modified by
the triggers. Thus, inspecting columns computed by triggers is another
common use-case for <literal>RETURNING</literal>.
対象のテーブルにトリガー(第37章)がある場合、RETURNING
で利用できるデータは、トリガーで更新された行です。
従って、トリガーによって計算された列を検査するのもRETURNING
の一般的な利用方法の一つです。