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 -