diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c index 89cf9f9389c..34ca52d6cc0 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -1029,7 +1029,6 @@ ReorderBufferAssignChild(ReorderBuffer *rb, TransactionId xid, bool new_top; bool new_sub; - txn = ReorderBufferTXNByXid(rb, xid, true, &new_top, lsn, true); subtxn = ReorderBufferTXNByXid(rb, subxid, true, &new_sub, lsn, false); if (!new_sub) @@ -1054,6 +1053,8 @@ ReorderBufferAssignChild(ReorderBuffer *rb, TransactionId xid, subtxn->toplevel_xid = xid; Assert(subtxn->nsubtxns == 0); + txn = ReorderBufferTXNByXid(rb, xid, true, &new_top, lsn, true); + /* set the reference to top-level transaction */ subtxn->toptxn = txn; diff --git a/src/backend/replication/logical/snapbuild.c b/src/backend/replication/logical/snapbuild.c index bf72ad45ec7..00428e46d09 100644 --- a/src/backend/replication/logical/snapbuild.c +++ b/src/backend/replication/logical/snapbuild.c @@ -808,6 +808,10 @@ SnapBuildProcessNewCid(SnapBuild *builder, TransactionId xid, { CommandId cid; + /* we have a top XID, but it's not known to be subxact */ + if (xid != xlrec->top_xid && xlrec->top_xid != InvalidTransactionId) + ReorderBufferAssignChild(builder->reorder, xlrec->top_xid, xid, lsn); + /* * we only log new_cid's if a catalog tuple was modified, so mark the * transaction as containing catalog modifications