diff --git a/src/backend/access/nbtree/nbtree.c b/src/backend/access/nbtree/nbtree.c index f9e94c28c5..8376a5e6b7 100644 --- a/src/backend/access/nbtree/nbtree.c +++ b/src/backend/access/nbtree/nbtree.c @@ -1208,9 +1208,10 @@ restart: * as long as the callback function only considers whether the * index tuple refers to pre-cutoff heap tuples that were * certainly already pruned away during VACUUM's initial heap - * scan by the time we get here. (We can rely on conflicts - * produced by heap pruning, rather than producing our own - * now.) + * scan by the time we get here. (XLOG_HEAP2_CLEANUP_INFO + * records produce conflicts using a latestRemovedXid value + * for the entire VACUUM, so there is no need to produce our + * own conflict now.) * * Backends with snapshots acquired after a VACUUM starts but * before it finishes could have a RecentGlobalXmin with a diff --git a/src/backend/access/nbtree/nbtxlog.c b/src/backend/access/nbtree/nbtxlog.c index 72d8432d3c..5eca4ab272 100644 --- a/src/backend/access/nbtree/nbtxlog.c +++ b/src/backend/access/nbtree/nbtxlog.c @@ -428,14 +428,7 @@ btree_xlog_delete(XLogReaderState *record) /* * If we have any conflict processing to do, it must happen before we - * update the page. - * - * Btree delete records can conflict with standby queries. You might - * think that vacuum records would conflict as well, but we've handled - * that already. XLOG_HEAP2_CLEANUP_INFO records provide the highest xid - * cleaned by the vacuum of the heap and so we can resolve any conflicts - * just once when that arrives. After that we know that no conflicts - * exist from individual btree vacuum records on that index. + * update the page */ if (InHotStandby) { @@ -463,10 +456,7 @@ btree_xlog_delete(XLogReaderState *record) PageIndexMultiDelete(page, unused, xlrec->nitems); } - /* - * Mark the page as not containing any LP_DEAD items --- see comments - * in _bt_delitems_delete(). - */ + /* Mark the page as not containing any LP_DEAD items */ opaque = (BTPageOpaque) PageGetSpecialPointer(page); opaque->btpo_flags &= ~BTP_HAS_GARBAGE;