• Tom Lane's avatar
    Fix bugs in contrib/pg_visibility. · 9a109452
    Tom Lane authored
    collect_corrupt_items() failed to initialize tuple.t_self.  While
    HeapTupleSatisfiesVacuum() doesn't actually use that value, it does
    Assert that it's valid, so that the code would dump core if ip_posid
    chanced to be zero.  (That's somewhat unlikely, which probably explains
    how this got missed.  In any case it wouldn't matter for field use.)
    
    Also, collect_corrupt_items was returning the wrong TIDs, that is the
    contents of t_ctid rather than the tuple's own location.  This would
    be the same thing in simple cases, but it could be wrong if, for
    example, a past update attempt had been rolled back, leaving a live
    tuple whose t_ctid doesn't point at itself.
    
    Also, in pg_visibility(), guard against trying to read a page past
    the end of the rel.  The VM code handles inquiries beyond the end
    of the map by silently returning zeroes, and it seems like we should
    do the same thing here.
    
    I ran into the assertion failure while using pg_visibility to check
    pg_upgrade's behavior, and then noted the other problems while
    reading the code.
    
    Report: <29043.1475288648@sss.pgh.pa.us>
    9a109452
pg_visibility.c 20.8 KB