Revise MERGE documentation
Add a note about the additional privileges required after the fix in 4989ce72644b (wording per Tom Lane); also change marked-up mentions of "target_table_name" to be simply "the target table" or the like. Also, note that "join_condition" is scouted for requisite privileges. Backpatch to 15. Discussion: https://postgr.es/m/202402211653.zuh6objy3z72@alvherre.pgsql
This commit is contained in:
parent
5f79cb7629
commit
6979ea2638
@ -57,7 +57,7 @@ DELETE
|
|||||||
|
|
||||||
<para>
|
<para>
|
||||||
<command>MERGE</command> performs actions that modify rows in the
|
<command>MERGE</command> performs actions that modify rows in the
|
||||||
<replaceable class="parameter">target_table_name</replaceable>,
|
target table identified as <replaceable class="parameter">target_table_name</replaceable>,
|
||||||
using the <replaceable class="parameter">data_source</replaceable>.
|
using the <replaceable class="parameter">data_source</replaceable>.
|
||||||
<command>MERGE</command> provides a single <acronym>SQL</acronym>
|
<command>MERGE</command> provides a single <acronym>SQL</acronym>
|
||||||
statement that can conditionally <command>INSERT</command>,
|
statement that can conditionally <command>INSERT</command>,
|
||||||
@ -68,7 +68,7 @@ DELETE
|
|||||||
<para>
|
<para>
|
||||||
First, the <command>MERGE</command> command performs a join
|
First, the <command>MERGE</command> command performs a join
|
||||||
from <replaceable class="parameter">data_source</replaceable> to
|
from <replaceable class="parameter">data_source</replaceable> to
|
||||||
<replaceable class="parameter">target_table_name</replaceable>
|
the target table
|
||||||
producing zero or more candidate change rows. For each candidate change
|
producing zero or more candidate change rows. For each candidate change
|
||||||
row, the status of <literal>MATCHED</literal> or <literal>NOT MATCHED</literal>
|
row, the status of <literal>MATCHED</literal> or <literal>NOT MATCHED</literal>
|
||||||
is set just once, after which <literal>WHEN</literal> clauses are evaluated
|
is set just once, after which <literal>WHEN</literal> clauses are evaluated
|
||||||
@ -83,7 +83,7 @@ DELETE
|
|||||||
<command>DELETE</command> commands of the same names. The syntax of
|
<command>DELETE</command> commands of the same names. The syntax of
|
||||||
those commands is different, notably that there is no <literal>WHERE</literal>
|
those commands is different, notably that there is no <literal>WHERE</literal>
|
||||||
clause and no table name is specified. All actions refer to the
|
clause and no table name is specified. All actions refer to the
|
||||||
<replaceable class="parameter">target_table_name</replaceable>,
|
target table,
|
||||||
though modifications to other tables may be made using triggers.
|
though modifications to other tables may be made using triggers.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
@ -98,23 +98,27 @@ DELETE
|
|||||||
There is no separate <literal>MERGE</literal> privilege.
|
There is no separate <literal>MERGE</literal> privilege.
|
||||||
If you specify an update action, you must have the
|
If you specify an update action, you must have the
|
||||||
<literal>UPDATE</literal> privilege on the column(s)
|
<literal>UPDATE</literal> privilege on the column(s)
|
||||||
of the <replaceable class="parameter">target_table_name</replaceable>
|
of the target table
|
||||||
that are referred to in the <literal>SET</literal> clause.
|
that are referred to in the <literal>SET</literal> clause.
|
||||||
If you specify an insert action, you must have the <literal>INSERT</literal>
|
If you specify an insert action, you must have the <literal>INSERT</literal>
|
||||||
privilege on the <replaceable class="parameter">target_table_name</replaceable>.
|
privilege on the target table.
|
||||||
If you specify a delete action, you must have the <literal>DELETE</literal>
|
If you specify a delete action, you must have the <literal>DELETE</literal>
|
||||||
privilege on the <replaceable class="parameter">target_table_name</replaceable>.
|
privilege on the target table.
|
||||||
|
If you specify a <literal>DO NOTHING</literal> action, you must have
|
||||||
|
the <literal>SELECT</literal> privilege on at least one column
|
||||||
|
of the target table.
|
||||||
|
You will also need <literal>SELECT</literal> privilege on any column(s)
|
||||||
|
of the <replaceable class="parameter">data_source</replaceable> and
|
||||||
|
of the target table referred to
|
||||||
|
in any <literal>condition</literal> (including <literal>join_condition</literal>)
|
||||||
|
or <literal>expression</literal>.
|
||||||
Privileges are tested once at statement start and are checked
|
Privileges are tested once at statement start and are checked
|
||||||
whether or not particular <literal>WHEN</literal> clauses are executed.
|
whether or not particular <literal>WHEN</literal> clauses are executed.
|
||||||
You will require the <literal>SELECT</literal> privilege on any column(s)
|
|
||||||
of the <replaceable class="parameter">data_source</replaceable> and
|
|
||||||
<replaceable class="parameter">target_table_name</replaceable> referred to
|
|
||||||
in any <literal>condition</literal> or <literal>expression</literal>.
|
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
<command>MERGE</command> is not supported if the
|
<command>MERGE</command> is not supported if the
|
||||||
<replaceable class="parameter">target_table_name</replaceable> is a
|
target table is a
|
||||||
materialized view, foreign table, or if it has any
|
materialized view, foreign table, or if it has any
|
||||||
rules defined on it.
|
rules defined on it.
|
||||||
</para>
|
</para>
|
||||||
@ -175,7 +179,7 @@ DELETE
|
|||||||
<para>
|
<para>
|
||||||
A query (<command>SELECT</command> statement or <command>VALUES</command>
|
A query (<command>SELECT</command> statement or <command>VALUES</command>
|
||||||
statement) that supplies the rows to be merged into the
|
statement) that supplies the rows to be merged into the
|
||||||
<replaceable class="parameter">target_table_name</replaceable>.
|
target table.
|
||||||
Refer to the <xref linkend="sql-select"/>
|
Refer to the <xref linkend="sql-select"/>
|
||||||
statement or <xref linkend="sql-values"/>
|
statement or <xref linkend="sql-values"/>
|
||||||
statement for a description of the syntax.
|
statement for a description of the syntax.
|
||||||
@ -203,16 +207,15 @@ DELETE
|
|||||||
<type>boolean</type> (similar to a <literal>WHERE</literal>
|
<type>boolean</type> (similar to a <literal>WHERE</literal>
|
||||||
clause) that specifies which rows in the
|
clause) that specifies which rows in the
|
||||||
<replaceable class="parameter">data_source</replaceable>
|
<replaceable class="parameter">data_source</replaceable>
|
||||||
match rows in the
|
match rows in the target table.
|
||||||
<replaceable class="parameter">target_table_name</replaceable>.
|
|
||||||
</para>
|
</para>
|
||||||
<warning>
|
<warning>
|
||||||
<para>
|
<para>
|
||||||
Only columns from <replaceable class="parameter">target_table_name</replaceable>
|
Only columns from the target table
|
||||||
that attempt to match <replaceable class="parameter">data_source</replaceable>
|
that attempt to match <replaceable class="parameter">data_source</replaceable>
|
||||||
rows should appear in <replaceable class="parameter">join_condition</replaceable>.
|
rows should appear in <replaceable class="parameter">join_condition</replaceable>.
|
||||||
<replaceable class="parameter">join_condition</replaceable> subexpressions that
|
<replaceable class="parameter">join_condition</replaceable> subexpressions that
|
||||||
only reference <replaceable class="parameter">target_table_name</replaceable>
|
only reference the target table's
|
||||||
columns can affect which action is taken, often in surprising ways.
|
columns can affect which action is taken, often in surprising ways.
|
||||||
</para>
|
</para>
|
||||||
</warning>
|
</warning>
|
||||||
@ -228,7 +231,7 @@ DELETE
|
|||||||
<para>
|
<para>
|
||||||
If the <literal>WHEN</literal> clause specifies <literal>WHEN MATCHED</literal>
|
If the <literal>WHEN</literal> clause specifies <literal>WHEN MATCHED</literal>
|
||||||
and the candidate change row matches a row in the
|
and the candidate change row matches a row in the
|
||||||
<replaceable class="parameter">target_table_name</replaceable>,
|
target table,
|
||||||
the <literal>WHEN</literal> clause is executed if the
|
the <literal>WHEN</literal> clause is executed if the
|
||||||
<replaceable class="parameter">condition</replaceable> is
|
<replaceable class="parameter">condition</replaceable> is
|
||||||
absent or it evaluates to <literal>true</literal>.
|
absent or it evaluates to <literal>true</literal>.
|
||||||
@ -237,7 +240,7 @@ DELETE
|
|||||||
Conversely, if the <literal>WHEN</literal> clause specifies
|
Conversely, if the <literal>WHEN</literal> clause specifies
|
||||||
<literal>WHEN NOT MATCHED</literal>
|
<literal>WHEN NOT MATCHED</literal>
|
||||||
and the candidate change row does not match a row in the
|
and the candidate change row does not match a row in the
|
||||||
<replaceable class="parameter">target_table_name</replaceable>,
|
target table,
|
||||||
the <literal>WHEN</literal> clause is executed if the
|
the <literal>WHEN</literal> clause is executed if the
|
||||||
<replaceable class="parameter">condition</replaceable> is
|
<replaceable class="parameter">condition</replaceable> is
|
||||||
absent or it evaluates to <literal>true</literal>.
|
absent or it evaluates to <literal>true</literal>.
|
||||||
@ -280,10 +283,10 @@ DELETE
|
|||||||
or null if there is none.
|
or null if there is none.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
If <replaceable class="parameter">target_table_name</replaceable>
|
If the target table
|
||||||
is a partitioned table, each row is routed to the appropriate partition
|
is a partitioned table, each row is routed to the appropriate partition
|
||||||
and inserted into it.
|
and inserted into it.
|
||||||
If <replaceable class="parameter">target_table_name</replaceable>
|
If the target table
|
||||||
is a partition, an error will occur if any input row violates the
|
is a partition, an error will occur if any input row violates the
|
||||||
partition constraint.
|
partition constraint.
|
||||||
</para>
|
</para>
|
||||||
@ -304,7 +307,7 @@ DELETE
|
|||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
The specification of an <literal>UPDATE</literal> action that updates
|
The specification of an <literal>UPDATE</literal> action that updates
|
||||||
the current row of the <replaceable class="parameter">target_table_name</replaceable>.
|
the current row of the target table.
|
||||||
Column names may not be specified more than once.
|
Column names may not be specified more than once.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
@ -318,7 +321,7 @@ DELETE
|
|||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
Specifies a <literal>DELETE</literal> action that deletes the current row
|
Specifies a <literal>DELETE</literal> action that deletes the current row
|
||||||
of the <replaceable class="parameter">target_table_name</replaceable>.
|
of the target table.
|
||||||
Do not include the table name or any other clauses, as you would normally
|
Do not include the table name or any other clauses, as you would normally
|
||||||
do with a <xref linkend="sql-delete"/> command.
|
do with a <xref linkend="sql-delete"/> command.
|
||||||
</para>
|
</para>
|
||||||
@ -329,8 +332,7 @@ DELETE
|
|||||||
<term><replaceable class="parameter">column_name</replaceable></term>
|
<term><replaceable class="parameter">column_name</replaceable></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
The name of a column in the <replaceable
|
The name of a column in the target table. The column name
|
||||||
class="parameter">target_table_name</replaceable>. The column name
|
|
||||||
can be qualified with a subfield name or array subscript, if
|
can be qualified with a subfield name or array subscript, if
|
||||||
needed. (Inserting into only some fields of a composite
|
needed. (Inserting into only some fields of a composite
|
||||||
column leaves the other fields null.)
|
column leaves the other fields null.)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user