mirror of
https://github.com/postgres/postgres.git
synced 2025-08-05 07:41:25 +03:00
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.
This commit is contained in:
@@ -1418,8 +1418,10 @@ The commands accepted in walsender mode are:
|
||||
<para>
|
||||
After streaming all the WAL on a timeline that is not the latest one,
|
||||
the server will end streaming by exiting the COPY mode. When the client
|
||||
acknowledges this by also exiting COPY mode, the server responds with a
|
||||
CommandComplete message, and is ready to accept a new command.
|
||||
acknowledges this by also exiting COPY mode, the server sends a
|
||||
single-row, single-column result set indicating the next timeline in
|
||||
this server's history. That is followed by a CommandComplete message,
|
||||
and the server is ready to accept a new command.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
@@ -1784,7 +1786,9 @@ The commands accepted in walsender mode are:
|
||||
</para>
|
||||
<para>
|
||||
The first ordinary result set contains the starting position of the
|
||||
backup, given in XLogRecPtr format as a single column in a single row.
|
||||
backup, in a single row with two columns. The first column contains
|
||||
the start position given in XLogRecPtr format, and the second column
|
||||
contains the corresponding timeline ID.
|
||||
</para>
|
||||
<para>
|
||||
The second ordinary result set has one row for each tablespace.
|
||||
@@ -1827,7 +1831,9 @@ The commands accepted in walsender mode are:
|
||||
<quote>ustar interchange format</> specified in the POSIX 1003.1-2008
|
||||
standard) dump of the tablespace contents, except that the two trailing
|
||||
blocks of zeroes specified in the standard are omitted.
|
||||
After the tar data is complete, a final ordinary result set will be sent.
|
||||
After the tar data is complete, a final ordinary result set will be sent,
|
||||
containing the WAL end position of the backup, in the same format as
|
||||
the start position.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
|
Reference in New Issue
Block a user