• Andres Freund's avatar
    Ensure snapshot is registered within ScanPgRelation(). · 42750b08
    Andres Freund authored
    In 9.4 I added support to use a historical snapshot in
    ScanPgRelation(), while adding logical decoding. Unfortunately a
    conflict with the concurrent removal of SnapshotNow was incorrectly
    resolved, leading to an unregistered snapshot being used.
    
    It is not correct to use an unregistered (or non-active) snapshot for
    anything non-trivial, because catalog invalidations can cause the
    snapshot to be invalidated.
    
    Luckily it seems unlikely to actively cause problems in practice, as
    ScanPgRelation() requires that we already have a lock on the relation,
    we only look for a single row, and we don't appear to rely on the
    result's tid to be correct. It however is clearly wrong and potential
    negative consequences would likely be hard to find. So it seems worth
    backpatching the fix, even without a concrete hazard.
    
    Discussion: https://postgr.es/m/20200229052459.wzhqnbhrriezg4v2@alap3.anarazel.de
    Backpatch: 9.5-
    42750b08
relcache.c 188 KB