• R
    Make the visibility map crash-safe. · 503c7305
    Robert Haas 提交于
    This involves two main changes from the previous behavior.  First,
    when we set a bit in the visibility map, emit a new WAL record of type
    XLOG_HEAP2_VISIBLE.  Replay sets the page-level PD_ALL_VISIBLE bit and
    the visibility map bit.  Second, when inserting, updating, or deleting
    a tuple, we can no longer get away with clearing the visibility map
    bit after releasing the lock on the corresponding heap page, because
    an intervening crash might leave the visibility map bit set and the
    page-level bit clear.  Making this work requires a bit of interface
    refactoring.
    
    In passing, a few minor but related cleanups: change the test in
    visibilitymap_set and visibilitymap_clear to throw an error if the
    wrong page (or no page) is pinned, rather than silently doing nothing;
    this case should never occur.  Also, remove duplicate definitions of
    InvalidXLogRecPtr.
    
    Patch by me, review by Noah Misch.
    503c7305
visibilitymap.h 1.1 KB