After PageSetAllVisible, use MarkBufferDirty.

Previously, we used SetBufferCommitInfoNeedsSave, but that's really
intended for dirty-marks we can theoretically afford to lose, such as
hint bits.  As for 9.2, the PD_ALL_VISIBLE mustn't be lost in this
way, since we could then end up with a heap page that isn't
all-visible and a visibility map page that is all visible, causing
index-only scans to return wrong answers.
This commit is contained in:
Robert Haas 2012-04-18 10:49:37 -04:00
parent b5eccaef2c
commit e93c0b820f

View File

@ -603,7 +603,7 @@ lazy_scan_heap(Relation onerel, LVRelStats *vacrelstats,
if (!PageIsAllVisible(page))
{
PageSetAllVisible(page);
SetBufferCommitInfoNeedsSave(buf);
MarkBufferDirty(buf);
}
LockBuffer(buf, BUFFER_LOCK_UNLOCK);
@ -838,7 +838,7 @@ lazy_scan_heap(Relation onerel, LVRelStats *vacrelstats,
if (!PageIsAllVisible(page) && all_visible)
{
PageSetAllVisible(page);
SetBufferCommitInfoNeedsSave(buf);
MarkBufferDirty(buf);
}
/*