diff --git a/src/backend/replication/logical/tablesync.c b/src/backend/replication/logical/tablesync.c index 108326bef1c4100b3c8e1a3f70436b01e881c0e3..b4b48d92cf43d340740b0a872a5c50a444b87f49 100644 --- a/src/backend/replication/logical/tablesync.c +++ b/src/backend/replication/logical/tablesync.c @@ -705,17 +705,20 @@ LogicalRepSyncTableStart(XLogRecPtr *origin_startpos) { char *slotname; char *err; + char relstate; + XLogRecPtr relstate_lsn; /* Check the state of the table synchronization. */ StartTransactionCommand(); + relstate = GetSubscriptionRelState(MyLogicalRepWorker->subid, + MyLogicalRepWorker->relid, + &relstate_lsn, false); + CommitTransactionCommand(); + SpinLockAcquire(&MyLogicalRepWorker->relmutex); - MyLogicalRepWorker->relstate = - GetSubscriptionRelState(MyLogicalRepWorker->subid, - MyLogicalRepWorker->relid, - &MyLogicalRepWorker->relstate_lsn, - false); + MyLogicalRepWorker->relstate = relstate; + MyLogicalRepWorker->relstate_lsn = relstate_lsn; SpinLockRelease(&MyLogicalRepWorker->relmutex); - CommitTransactionCommand(); /* * To build a slot name for the sync work, we are limited to NAMEDATALEN -