For those of you that don’t monitor the pgsql-bugs mailing list, this interesting bug was posted recently:
>> I have encountered a bug in PostgreSQL 10.1: when the target
>> directory for pg_rewind contains a read-only file (e.g. server.key),
>> pg_rewind exits with “could not open target file” (legitimate) and
>> corrupts the control file global/pg_control to size 0 (bug). From now
>> on, pg_rewind always exits with “unexpected control file size 0,
>> expected 8192″ and a restore from pg_basebackup is needed.
> Likely that’s reproducible down to 9.5 where pg_rewind has been
> introduced. I agree that we should do better with failure handling
> here. Corrupting the control file is not cool.
I can already confirm that this also occurs with PostgreSQL 9.6.
So if you want to use pg_rewind, then make sure you don’t have any read-only files in your $PGDATA directory… otherwise your control file will get overwritten. :-O
I suspect this will get fixed in v9.5.11, v9.6.7, and v10.2… but there are no guarantees yet.
Here’s the link to the original chat:
https://www.postgresql.org/message-id/20180104200633.17004.16377%40wrigleys.postgresql.org