Allow pg_receivexlog and pg_basebackup --xlog-method to handle streaming timeline switches (Heikki Linnakangas)
Make pg_receivexlog and pg_basebackup -X stream work across timeline switches.
This mirrors the changes done earlier to the server in standby mode. When
receivelog reaches the end of a timeline, as reported by the server, it
fetches the timeline history file of the next timeline, and restarts
streaming from the new timeline by issuing a new START_STREAMING command.
When pg_receivexlog crosses a timeline, it leaves the .partial suffix on the
last segment on the old timeline. This helps you to tell apart a partial
segment left in the directory because of a timeline switch, and a completed
segment. If you just follow a single server, it won't make a difference, but
it can be significant in more complicated scenarios where new WAL is still
generated on the old timeline.
This includes two small changes to the streaming replication protocol:
First, when you reach the end of timeline while streaming, the server now
sends the TLI of the next timeline in the server's history to the client.
pg_receivexlog uses that as the next timeline, so that it doesn't need to
parse the timeline history file like a standby server does. Second, when
BASE_BACKUP command sends the begin and end WAL positions, it now also sends
the timeline IDs corresponding the positions.
PostgreSQL 9.3 对流复制协议的改进,
http://blog.163.com/digoal@126/blog/static/1638770402013482399908/
同时对pg_basebackup和pg_receivexlog使用流复制协议复制xlog时增加了对时间线文件的复制支持.
这种情况可能发生在对端是一台standby, 但是对端promote了, 或者其他standby promote了, 对端的standby 的xlog也随之更新了.
在没有归档和配置recovery.conf restore_command的情况下, 无需人为的拷贝history文件.
[参考]
2. http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=3684a534efbd2ffd72e2c4cbd21f9752be3efaf1
3. http://www.postgresql.org/message-id/flat/50F56245.8050802@vmware.com#50F56245.8050802@vmware.com
时间: 2025-01-31 05:42:31