pgsql: Prevent running pg_resetwal/pg_resetxlog against wrong-version d

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Prevent running pg_resetwal/pg_resetxlog against wrong-version d
Date: 2017-05-29 21:08:52
Message-ID: E1dFRuG-0008LP-5I@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Prevent running pg_resetwal/pg_resetxlog against wrong-version data dirs.

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

Branch
------
REL9_6_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/98bff290747e50b53f0076d69f239a13e032c7e1

Modified Files
--------------
doc/src/sgml/ref/pg_resetxlog.sgml | 5 +++
src/bin/pg_resetxlog/pg_resetxlog.c | 70 ++++++++++++++++++++++++++++++++++++-
2 files changed, 74 insertions(+), 1 deletion(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2017-05-29 23:29:52 pgsql: Make edge-case behavior of jsonb_populate_record match json_popu
Previous Message Tom Lane 2017-05-29 19:19:26 pgsql: Allow NumericOnly to be "+ FCONST".