• Tom Lane's avatar
    Prevent running pg_resetwal/pg_resetxlog against wrong-version data dirs. · f3db7f16
    Tom Lane authored
    pg_resetwal (formerly pg_resetxlog) doesn't insist on finding a matching
    version number in pg_control, and that seems like an important thing to
    preserve since recovering from corrupt pg_control is a prime reason to
    need to run it.  However, that means you can try to run it against a
    data directory of a different major version, which is at best useless
    and at worst disastrous.  So as to provide some protection against that
    type of pilot error, inspect PG_VERSION at startup and refuse to do
    anything if it doesn't match.  PG_VERSION is read-only after initdb,
    so it's unlikely to get corrupted, and even if it were corrupted it would
    be easy to fix by hand.
    
    This hazard has been there all along, so back-patch to all supported
    branches.
    
    Michael Paquier, with some kibitzing by me
    
    Discussion: https://postgr.es/m/f4b8eb91-b934-8a0d-b3cc-68f06e2279d1@enterprisedb.com
    f3db7f16
pg_resetwal.c 35.8 KB