diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index 245e9be6f2..e878d882ae 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -173,6 +173,7 @@ #include "replication/logicalworker.h" #include "replication/origin.h" #include "replication/walreceiver.h" +#include "replication/walsender_private.h" #include "replication/worker_internal.h" #include "rewrite/rewriteHandler.h" #include "storage/buffile.h" @@ -3415,6 +3416,17 @@ get_flush_position(XLogRecPtr *write, XLogRecPtr *flush, dlist_mutable_iter iter; XLogRecPtr local_flush = GetFlushRecPtr(NULL); + /* + * If synchronous replication is configured, take into account its position. + */ + if (SyncRepStandbyNames != NULL && SyncRepStandbyNames[0] != '\0') + { + /* assumes u64 read is atomic */ + XLogRecPtr sync_rep_flush = WalSndCtl->lsn[SYNC_REP_WAIT_FLUSH]; + + local_flush = Min(local_flush, sync_rep_flush); + } + *write = InvalidXLogRecPtr; *flush = InvalidXLogRecPtr;