DATABASE TECHNICAL PAPER

Bug in pg_rewind overwrites pg_control

2018-01-10 Greg Clough

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

Leave a Reply

Discover more from Greg Clough's notes on PostgreSQL

Subscribe now to keep reading and get access to the full archive.

Continue reading