Skip to content

Commit 965b2cc

Browse files
author
Amit Kapila
committed
Doc: Improve the Replica Identity information.
This commit improves the Replica Identity information and clarifies its related restrictions. Reported-by: James Coleman Author: Peter Smith Co-authored-by: Robert Treat Reviewed-by: Laurenz Albe, Amit Kapila Discussion: https://postgr.es/m/CAAaqYe_=7qFSqW7qavvhVy58mmzk1uSQ0RReRiUHyKO5znvr7g@mail.gmail.com
1 parent 32a18cc commit 965b2cc

File tree

2 files changed

+55
-30
lines changed

2 files changed

+55
-30
lines changed

doc/src/sgml/logical-replication.sgml

Lines changed: 53 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -124,35 +124,6 @@
124124
<command>TRUNCATE</command>. See <xref linkend="logical-replication-row-filter"/>).
125125
</para>
126126

127-
<para>
128-
A published table must have a <firstterm>replica identity</firstterm> configured in
129-
order to be able to replicate <command>UPDATE</command>
130-
and <command>DELETE</command> operations, so that appropriate rows to
131-
update or delete can be identified on the subscriber side. By default,
132-
this is the primary key, if there is one. Another unique index (with
133-
certain additional requirements) can also be set to be the replica
134-
identity. If the table does not have any suitable key, then it can be set
135-
to replica identity <literal>FULL</literal>, which means the entire row becomes
136-
the key. When replica identity <literal>FULL</literal> is specified,
137-
indexes can be used on the subscriber side for searching the rows. Candidate
138-
indexes must be btree or hash, non-partial, and the leftmost index field must
139-
be a column (not an expression) that references the published table column.
140-
These restrictions on the non-unique index properties adhere to some of the
141-
restrictions that are enforced for primary keys. If there are no such
142-
suitable indexes, the search on the subscriber side can be very inefficient,
143-
therefore replica identity <literal>FULL</literal> should only be used as a
144-
fallback if no other solution is possible. If a replica identity other
145-
than <literal>FULL</literal> is set on the publisher side, a replica identity
146-
comprising the same or fewer columns must also be set on the subscriber
147-
side. See <xref linkend="sql-altertable-replica-identity"/> for details on
148-
how to set the replica identity. If a table without a replica identity is
149-
added to a publication that replicates <command>UPDATE</command>
150-
or <command>DELETE</command> operations then
151-
subsequent <command>UPDATE</command> or <command>DELETE</command>
152-
operations will cause an error on the publisher. <command>INSERT</command>
153-
operations can proceed regardless of any replica identity.
154-
</para>
155-
156127
<para>
157128
Every publication can have multiple subscribers.
158129
</para>
@@ -169,6 +140,59 @@
169140
transactional, so the table will start or stop replicating at the correct
170141
snapshot once the transaction has committed.
171142
</para>
143+
144+
<sect2 id="logical-replication-publication-replica-identity">
145+
<title>Replica Identity</title>
146+
147+
<para>
148+
A published table must have a <firstterm>replica identity</firstterm>
149+
configured in order to be able to replicate <command>UPDATE</command>
150+
and <command>DELETE</command> operations, so that appropriate rows to
151+
update or delete can be identified on the subscriber side.
152+
</para>
153+
154+
<para>
155+
By default, this is the primary key, if there is one. Another unique index
156+
(with certain additional requirements) can also be set to be the replica
157+
identity. If the table does not have any suitable key, then it can be set
158+
to replica identity <literal>FULL</literal>, which means the entire row
159+
becomes the key. When replica identity <literal>FULL</literal> is
160+
specified, indexes can be used on the subscriber side for searching the
161+
rows. Candidate indexes must be btree or hash, non-partial, and the
162+
leftmost index field must be a column (not an expression) that references
163+
the published table column. These restrictions on the non-unique index
164+
properties adhere to some of the restrictions that are enforced for
165+
primary keys. If there are no such suitable indexes, the search on the
166+
subscriber side can be very inefficient, therefore replica identity
167+
<literal>FULL</literal> should only be used as a fallback if no other
168+
solution is possible.
169+
</para>
170+
171+
<para>
172+
If a replica identity other than <literal>FULL</literal> is set on the
173+
publisher side, a replica identity comprising the same or fewer columns
174+
must also be set on the subscriber side.
175+
</para>
176+
177+
<para>
178+
Tables with a replica identity defined as <literal>NOTHING</literal>,
179+
<literal>DEFAULT</literal> without a primary key, or <literal>USING
180+
INDEX</literal> with a dropped index, cannot support
181+
<command>UPDATE</command> or <command>DELETE</command> operations when
182+
included in a publication replicating these actions. Attempting such
183+
operations will result in an error on the publisher.
184+
</para>
185+
186+
<para>
187+
<command>INSERT</command> operations can proceed regardless of any replica identity.
188+
</para>
189+
190+
<para>
191+
See <link linkend="sql-altertable-replica-identity"><literal>ALTER TABLE...REPLICA IDENTITY</literal></link>
192+
for details on how to set the replica identity.
193+
</para>
194+
</sect2>
195+
172196
</sect1>
173197

174198
<sect1 id="logical-replication-subscription">

doc/src/sgml/ref/alter_table.sgml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -927,8 +927,9 @@ WITH ( MODULUS <replaceable class="parameter">numeric_literal</replaceable>, REM
927927
<term><literal>DEFAULT</literal></term>
928928
<listitem>
929929
<para>
930-
Records the old values of the columns of the primary key, if any.
930+
Records the old values of the columns of the primary key.
931931
This is the default for non-system tables.
932+
When there is no primary key, the behavior is the same as <literal>NOTHING</literal>.
932933
</para>
933934
</listitem>
934935
</varlistentry>

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy