On 25th of November 2018, Peter Eisentraut committed patch:
Integrate recovery.conf into postgresql.conf recovery.conf settings are now set in postgresql.conf (or other GUC sources). Currently, all the affected settings are PGC_POSTMASTER; this could be refined in the future case by case. Recovery is now initiated by a file recovery.signal. Standby mode is initiated by a file standby.signal. The standby_mode setting is gone. If a recovery.conf file is found, an error is issued. The trigger_file setting has been renamed to promote_trigger_file as part of the move. The documentation chapter "Recovery Configuration" has been integrated into "Server Configuration". pg_basebackup -R now appends settings to postgresql.auto.conf and creates a standby.signal file. Author: Fujii Masao Author: Simon Riggs Author: Abhijit Menon-Sen Author: Sergei Kornilov Discussion: https://www.postgresql.org/message-id/flat/@web3g.yandex.ru/
This is big change, one that can potentially cause problems when upgrading from earlier versions to PostgreSQL 12.
First, let's list all things that could be configured in recovery.conf in Pg11:
- restore_command
- archive_cleanup_command
- recovery_end_command
- recovery_target
- recovery_target_name
- recovery_target_time
- recovery_target_xid
- recovery_target_lsn
- recovery_target_inclusive
- recovery_target_timeline
- recovery_target_action
- standby_mode
- primary_conninfo
- primary_slot_name
- trigger_file
- recovery_min_apply_delay
Quite a lot of things.
Most of them are named the same, but are configured in postgresql.conf. There are changes, though:
- instead of trigger_file there is promote_trigger_file
- standby_mode is completely gone
So, to test it, I figured I'll make myself a copy of my test PGDATA:
=$ pg_basebackup -D data-2 -R --verbose pg_basebackup: initiating base backup, waiting for checkpoint to complete pg_basebackup: checkpoint completed pg_basebackup: write-ahead log start point: 0/C000028 on timeline 1 pg_basebackup: starting background WAL receiver pg_basebackup: created temporary replication slot "pg_basebackup_23907" pg_basebackup: write-ahead log end point: 0/C0000F8 pg_basebackup: waiting for background process to finish streaming ... pg_basebackup: syncing data to disk ... pg_basebackup: base backup completed
Afterwards, I had two files that are in master, but are absent in data-2: postmaster.opts and postmaster.pid – but these are created by starting PostgreSQL, so it's good that they are gone.
I also had:
- new file, with size 0, named standby.signal
- file postgresql.auto.conf that I had before, with just some comments, but now it contained also this one line:
primary_conninfo = 'user=pgdba passfile=''/home/pgdba/.pgpass'' port=5120 sslmode=prefer sslcompression=0 target_session_attrs=any'
Given that both instances are on the same server, I did:
=$ echo port=9999 >> data-2/postgresql.auto.conf =$ pg_ctl -D data-2 start
And it worked.
If I'd remove standby.signal file before starting, then this new Pg will start as master on its own.
Currently it looks that all params need restart to be reloaded, but it doesn't seem like all that big of a problem.
All in all – it's nice that we will have single configuration source now, thanks to all involved.