summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAmit Kapila <akapila@postgresql.org>2025-02-25 09:22:16 +0530
committerAmit Kapila <akapila@postgresql.org>2025-02-25 09:22:16 +0530
commit7c906c5b46f8189a04e67bc550cba33dd3851b6e (patch)
treeacd38764fdf6a43a1ee9dbe39449d452c74e253f /src
parent174952ece1c04b725a2eafabf08d7192b99866ca (diff)
Doc: Fix pg_copy_logical_replication_slot description.
This commit documents that the failover option is not copied when using the pg_copy_logical_replication_slot function. In passing, we modify the comments in the function clarifying the reason for this behavior. Reported-by: <duffieldzane@gmail.com> Author: Hou Zhijie <houzj.fnst@fujitsu.com> Reviewed-by: Amit Kapila <amit.kapila16@gmail.com> Backpatch-through: 17, where it was introduced Discussion: https://postgr.es/m/173976850802.682632.11315364077431550250@wrigleys.postgresql.org
Diffstat (limited to 'src')
-rw-r--r--src/backend/replication/slotfuncs.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/backend/replication/slotfuncs.c b/src/backend/replication/slotfuncs.c
index dd6c1d5a7e3..43c3cc7336b 100644
--- a/src/backend/replication/slotfuncs.c
+++ b/src/backend/replication/slotfuncs.c
@@ -698,13 +698,18 @@ copy_replication_slot(FunctionCallInfo fcinfo, bool logical_slot)
* hence pass find_startpoint false. confirmed_flush will be set
* below, by copying from the source slot.
*
- * To avoid potential issues with the slot synchronization where the
- * restart_lsn of a replication slot can go backward, we set the
- * failover option to false here. This situation occurs when a slot
- * on the primary server is dropped and immediately replaced with a
- * new slot of the same name, created by copying from another existing
- * slot. However, the slot synchronization will only observe the
- * restart_lsn of the same slot going backward.
+ * We don't copy the failover option to prevent potential issues with
+ * slot synchronization. For instance, if a slot was synchronized to
+ * the standby, then dropped on the primary, and immediately recreated
+ * by copying from another existing slot with much earlier restart_lsn
+ * and confirmed_flush_lsn, the slot synchronization would only
+ * observe the LSN of the same slot moving backward. As slot
+ * synchronization does not copy the restart_lsn and
+ * confirmed_flush_lsn backward (see update_local_synced_slot() for
+ * details), if a failover happens before the primary's slot catches
+ * up, logical replication cannot continue using the synchronized slot
+ * on the promoted standby because the slot retains the restart_lsn
+ * and confirmed_flush_lsn that are much later than expected.
*/
create_logical_replication_slot(NameStr(*dst_name),
plugin,