Re: Executing pg_createsubscriber with a non-compatible control file

Masahiko Sawada <sawada.mshk@gmail.com>

From: Masahiko Sawada <sawada.mshk@gmail.com>
To: Michael Paquier <michael@paquier.xyz>
Cc: Postgres hackers <pgsql-hackers@lists.postgresql.org>, Euler Taveira <euler@eulerto.com>
Date: 2025-10-07T18:51:45Z
Lists: pgsql-hackers
On Sun, Oct 5, 2025 at 9:19 PM Michael Paquier <michael@paquier.xyz> wrote:
>
> Hi all,
> (Adding Euler in CC.)
>
> I have mentioned that on this thread:
> https://www.postgresql.org/message-id/aOM-T6iojyzb7OVB@paquier.xyz
>
> Attempting to execute pg_createsubscriber compiled with a version of
> PG_CONTROL_VERSION incompatible with the standby we want to switch to
> a logical replica leads to the following error:
> $ pg_createsubscriber -D $HOME/data/5433 \
>     -P "host=/tmp port=5432" -d postgres
> pg_createsubscriber: error: control file appears to be corrupt
>
> For example, setup a cluster based on v17 and run the command.  This
> is confusing, because the control file is not corrupted,
> pg_createsubscriber is just missing the fact that the major version it
> is compiled with is not able to manipulate the control file of the
> target data folder.  We enforce such checks for other tools, like
> pg_checksums or pg_rewind, and I don't see why pg_createsubscriber
> should be an exception?

+1 to add a major version check for better log messages.

Just to be clear, did you mean that pg_checksums and pg_rewind already
do such checks? IIUC pg_checksums does CRC check for the control file,
and if we execute v18-pg_checksums against v17-cluster we end up with
a similar error but with a different log message like "pg_checksums:
error: pg_control CRC value is incorrect". Those log messages are not
helpful either.

Regards,

-- 
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com



Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. pg_checksums: Use new routine to retrieve data of PG_VERSION

  2. pg_createsubscriber: Use new routine to retrieve data of PG_VERSION

  3. pg_resetwal: Use new routine to retrieve data of PG_VERSION

  4. pg_combinebackup: Use new routine to retrieve data of PG_VERSION

  5. pg_upgrade: Use new routine to retrieve data of PG_VERSION

  6. Introduce frontend API able to retrieve the contents of PG_VERSION