• Tom Lane's avatar
    Avoid possible crash while finishing up a heap rewrite. · 9d523119
    Tom Lane authored
    end_heap_rewrite was not careful to ensure that the target relation
    is open at the smgr level before performing its final smgrimmedsync.
    In ordinary cases this is no problem, because it would have been
    opened earlier during the rewrite.  However a crash can be reproduced
    by re-clustering an empty table with CLOBBER_CACHE_ALWAYS enabled.
    
    Although that exact scenario does not crash in v13, I think that's
    a chance result of unrelated planner changes, and the problem is
    likely still reachable with other test cases.  The true proximate
    cause of this failure is commit c6b92041, which replaced a call to
    heap_sync (which was careful about opening smgr) with a direct call
    to smgrimmedsync.  Hence, back-patch to v13.
    
    Amul Sul, per report from Neha Sharma; cosmetic changes
    and test case by me.
    
    Discussion: https://postgr.es/m/CANiYTQsU7yMFpQYnv=BrcRVqK_3U3mtAzAsJCaqtzsDHfsUbdQ@mail.gmail.com
    9d523119
rewriteheap.c 40.2 KB