mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
Remove the new UPSERT command tag and use INSERT instead.
Previously, INSERT with ON CONFLICT DO UPDATE specified used a new command tag -- UPSERT. It was introduced out of concern that INSERT as a command tag would be a misrepresentation for ON CONFLICT DO UPDATE, as some affected rows may actually have been updated. Alvaro Herrera noticed that the implementation of that new command tag was incomplete; in subsequent discussion we concluded that having it doesn't provide benefits that are in line with the compatibility breaks it requires. Catversion bump due to the removal of PlannedStmt->isUpsert. Author: Peter Geoghegan Discussion: 20150520215816.GI5885@postgresql.org
This commit is contained in:
@ -3011,16 +3011,9 @@ CommandComplete (B)
|
||||
<literal>INSERT <replaceable>oid</replaceable>
|
||||
<replaceable>rows</replaceable></literal>, where
|
||||
<replaceable>rows</replaceable> is the number of rows
|
||||
inserted. However, if and only if <literal>ON CONFLICT
|
||||
UPDATE</> is specified, then the tag is <literal>UPSERT
|
||||
<replaceable>oid</replaceable>
|
||||
<replaceable>rows</replaceable></literal>, where
|
||||
<replaceable>rows</replaceable> is the number of rows inserted
|
||||
<emphasis>or updated</emphasis>.
|
||||
<replaceable>oid</replaceable> is the object ID of the
|
||||
inserted row if <replaceable>rows</replaceable> is 1 and the
|
||||
target table has OIDs, and (for the <literal>UPSERT</literal>
|
||||
tag), the row was actually inserted rather than updated;
|
||||
inserted. <replaceable>oid</replaceable> is the object ID
|
||||
of the inserted row if <replaceable>rows</replaceable> is 1
|
||||
and the target table has OIDs;
|
||||
otherwise <replaceable>oid</replaceable> is 0.
|
||||
</para>
|
||||
|
||||
|
@ -497,20 +497,13 @@ INSERT INTO <replaceable class="PARAMETER">table_name</replaceable> [ AS <replac
|
||||
<screen>
|
||||
INSERT <replaceable>oid</replaceable> <replaceable class="parameter">count</replaceable>
|
||||
</screen>
|
||||
However, in the event of an <literal>ON CONFLICT DO UPDATE</> clause
|
||||
(but <emphasis>not</emphasis> in the event of an <literal>ON
|
||||
CONFLICT DO NOTHING</> clause), the command tag reports the number of
|
||||
rows inserted or updated together, of the form
|
||||
<screen>
|
||||
UPSERT <replaceable>oid</replaceable> <replaceable class="parameter">count</replaceable>
|
||||
</screen>
|
||||
The <replaceable class="parameter">count</replaceable> is the number
|
||||
of rows inserted. If <replaceable class="parameter">count</replaceable>
|
||||
is exactly one, and the target table has OIDs, then
|
||||
<replaceable class="parameter">oid</replaceable> is the
|
||||
<acronym>OID</acronym>
|
||||
assigned to the inserted row (but not if there is only a single
|
||||
updated row). Otherwise <replaceable
|
||||
The <replaceable class="parameter">count</replaceable> is the
|
||||
number of rows inserted or updated. If <replaceable
|
||||
class="parameter">count</replaceable> is exactly one, and the
|
||||
target table has OIDs, then <replaceable
|
||||
class="parameter">oid</replaceable> is the <acronym>OID</acronym>
|
||||
assigned to the inserted row. The single row must have been
|
||||
inserted rather than updated. Otherwise <replaceable
|
||||
class="parameter">oid</replaceable> is zero.
|
||||
</para>
|
||||
|
||||
|
Reference in New Issue
Block a user