• Tom Lane's avatar
    Repair subtle VACUUM bug that led to 'HEAP_MOVED_IN was not expected' · fcb7c14d
    Tom Lane authored
    errors.  VACUUM normally compacts the table back-to-front, and stops
    as soon as it gets to a page that it has moved some tuples onto.
    (This logic doesn't make for a complete packing of the table, but it
    should be pretty close.)  But the way it was checking whether it had
    got to a page with some moved-in tuples was to look at whether the
    current page was the same as the last page of the list of pages that
    have enough free space to be move-in targets.  And there was other
    code that would remove pages from that list once they got full.
    There was a kluge that prevented the last list entry from being
    removed, but it didn't get the job done.  Fixed by keeping a separate
    variable that contains the largest block number into which a tuple
    has been moved.  There's no longer any need to protect the last element
    of the fraged_pages list.
    Also, fix NOTICE messages to describe elapsed user/system CPU time
    correctly.
    fcb7c14d
vacuum.c 81.6 KB