diff --git a/src/backend/commands/vacuumlazy.c b/src/backend/commands/vacuumlazy.c index a93d4a1f23..2a8cab746a 100644 --- a/src/backend/commands/vacuumlazy.c +++ b/src/backend/commands/vacuumlazy.c @@ -666,7 +666,7 @@ lazy_scan_heap(Relation onerel, LVRelStats *vacrelstats, * to use lazy_check_needs_freeze() for both situations, though. */ LockBuffer(buf, BUFFER_LOCK_SHARE); - if (!lazy_check_needs_freeze(buf, &hastup) || !scan_all) + if (!lazy_check_needs_freeze(buf, &hastup)) { UnlockReleaseBuffer(buf); vacrelstats->scanned_pages++; @@ -675,6 +675,18 @@ lazy_scan_heap(Relation onerel, LVRelStats *vacrelstats, vacrelstats->nonempty_pages = blkno + 1; continue; } + if (!scan_all) + { + /* + * Here, we must not advance scanned_pages; that would amount + * to claiming that the page contains no freezable tuples. + */ + UnlockReleaseBuffer(buf); + vacrelstats->pinskipped_pages++; + if (hastup) + vacrelstats->nonempty_pages = blkno + 1; + continue; + } LockBuffer(buf, BUFFER_LOCK_UNLOCK); LockBufferForCleanup(buf); /* drop through to normal processing */