On Sat, Feb 19, 2022 at 7:01 PM Andres Freund <and...@anarazel.de> wrote: > It's kind of surprising that this needs this > 0001-Add-adversarial-ConditionalLockBuff to break. I suspect it's a question > of hint bits changing due to lazy_scan_noprune(), which then makes > HeapTupleHeaderIsHotUpdated() have a different return value, preventing the > "If the tuple is DEAD and doesn't chain to anything else" > path from being taken.
That makes sense as an explanation. Goes to show just how fragile the "DEAD and doesn't chain to anything else" logic at the top of heap_prune_chain really is. -- Peter Geoghegan