mirror of https://github.com/postgres/postgres
Doc: explain the log format of logical replication conflicts.
This commit adds a detailed explanation of the log format for logical replication conflicts. Author: Hou Zhijie Reviewed-by: Shveta Malik, Peter Smith, Hayato Kuroda Discussion: https://postgr.es/m/OS0PR01MB5716352552DFADB8E9AD1D8994C92@OS0PR01MB5716.jpnprd01.prod.outlook.com Discussion: https://postgr.es/m/OS0PR01MB57162EDE8BA17F3EE08A24CA948D2@OS0PR01MB5716.jpnprd01.prod.outlook.com
This commit is contained in:
parent
d55322b0da
commit
edcb712585
|
@ -1666,6 +1666,111 @@ test_sub=# SELECT * FROM t1 ORDER BY id;
|
|||
log.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The log format for logical replication conflicts is as follows:
|
||||
<synopsis>
|
||||
LOG: conflict detected on relation "<replaceable>schemaname</replaceable>.<replaceable>tablename</replaceable>": conflict=<replaceable>conflict_type</replaceable>
|
||||
DETAIL: <replaceable class="parameter">detailed_explanation</replaceable>.
|
||||
{<replaceable class="parameter">detail_values</replaceable> [; ... ]}.
|
||||
|
||||
<phrase>where <replaceable class="parameter">detail_values</replaceable> is one of:</phrase>
|
||||
|
||||
<literal>Key</literal> (<replaceable>column_name</replaceable> <optional>, ...</optional>)=(<replaceable>column_value</replaceable> <optional>, ...</optional>)
|
||||
<literal>existing local tuple</literal> <optional>(<replaceable>column_name</replaceable> <optional>, ...</optional>)=</optional>(<replaceable>column_value</replaceable> <optional>, ...</optional>)
|
||||
<literal>remote tuple</literal> <optional>(<replaceable>column_name</replaceable> <optional>, ...</optional>)=</optional>(<replaceable>column_value</replaceable> <optional>, ...</optional>)
|
||||
<literal>replica identity</literal> {(<replaceable>column_name</replaceable> <optional>, ...</optional>)=(<replaceable>column_value</replaceable> <optional>, ...</optional>) | full <optional>(<replaceable>column_name</replaceable> <optional>, ...</optional>)=</optional>(<replaceable>column_value</replaceable> <optional>, ...</optional>)}
|
||||
</synopsis>
|
||||
|
||||
The log provides the following information:
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><literal>LOG</literal></term>
|
||||
<listitem>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
<replaceable>schemaname</replaceable>.<replaceable>tablename</replaceable>
|
||||
identifies the local relation involved in the conflict.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<replaceable>conflict_type</replaceable> is the type of conflict that occurred
|
||||
(e.g., <literal>insert_exists</literal>, <literal>update_exists</literal>).
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><literal>DETAIL</literal></term>
|
||||
<listitem>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
<replaceable class="parameter">detailed_explanation</replaceable> includes
|
||||
the origin, transaction ID, and commit timestamp of the transaction that
|
||||
modified the existing local tuple, if available.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
The <literal>Key</literal> section includes the key values of the local
|
||||
tuple that violated a unique constraint for
|
||||
<literal>insert_exists</literal> or <literal>update_exists</literal>
|
||||
conflicts.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
The <literal>existing local tuple</literal> section includes the local
|
||||
tuple if its origin differs from the remote tuple for
|
||||
<literal>update_differ</literal> or <literal>delete_differ</literal>
|
||||
conflicts, or if the key value conflicts with the remote tuple for
|
||||
<literal>insert_exists</literal> or <literal>update_exists</literal>
|
||||
conflicts.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
The <literal>remote tuple</literal> section includes the new tuple from
|
||||
the remote insert or update operation that caused the conflict. Note that
|
||||
for an update operation, the column value of the new tuple will be null
|
||||
if the value is unchanged and toasted.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
The <literal>replica identity</literal> section includes the replica
|
||||
identity key values that were used to search for the existing local
|
||||
tuple to be updated or deleted. This may include the full tuple value
|
||||
if the local relation is marked with
|
||||
<link linkend="sql-altertable-replica-identity-full"><literal>REPLICA IDENTITY FULL</literal></link>.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<replaceable class="parameter">column_name</replaceable> is the column name.
|
||||
For <literal>existing local tuple</literal>, <literal>remote tuple</literal>,
|
||||
and <literal>replica identity full</literal> cases, column names are
|
||||
logged only if the user lacks the privilege to access all columns of
|
||||
the table. If column names are present, they appear in the same order
|
||||
as the corresponding column values.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<replaceable class="parameter">column_value</replaceable> is the column value.
|
||||
The large column values are truncated to 64 bytes.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Logical replication operations are performed with the privileges of the role
|
||||
which owns the subscription. Permissions failures on target tables will
|
||||
|
|
Loading…
Reference in New Issue