diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c index 00a8327e77..d0269fa913 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -3144,8 +3144,12 @@ ReorderBufferSetBaseSnapshot(ReorderBuffer *rb, TransactionId xid, */ txn = ReorderBufferTXNByXid(rb, xid, true, &is_new, lsn, true); if (rbtxn_is_known_subxact(txn)) + { txn = ReorderBufferTXNByXid(rb, txn->toplevel_xid, false, NULL, InvalidXLogRecPtr, false); + if (txn == NULL) + elog(ERROR, "unknown transaction, top-level xid: %u", txn->toplevel_xid); + } Assert(txn->base_snapshot == NULL); txn->base_snapshot = snap; @@ -3471,8 +3475,13 @@ ReorderBufferXidHasBaseSnapshot(ReorderBuffer *rb, TransactionId xid) /* a known subtxn? operate on top-level txn instead */ if (rbtxn_is_known_subxact(txn)) + { txn = ReorderBufferTXNByXid(rb, txn->toplevel_xid, false, NULL, InvalidXLogRecPtr, false); + Assert(txn != NULL); + if (txn == NULL) + return false; + } return txn->base_snapshot != NULL; }