-
+
Backup and Restore
It is important that the archive command return zero exit status if and
only if it succeeded. Upon getting a zero result,
-
PostgreSQL> will assume that the WAL segment file has been
- successfully archived, and will remove or recycle it.
- However, a nonzero status tells
-
PostgreSQL> that the file was not archived; it will try
- again periodically until it succeeds.
+
PostgreSQL> will assume that the file has been
+ successfully archived, and will remove or recycle it. However, a nonzero
+ status tells
PostgreSQL> that the file was not archived;
+ it will try again periodically until it succeeds.
It is important that the command return nonzero exit status on failure.
- The command will> be asked for log files that are not present
+ The command will> be asked for files that are not present
in the archive; it must return nonzero when so asked. This is not an
- error condition. Be aware also that the base name of the %p>
- path will be different from %f>; do not expect them to be
- interchangeable.
+ error condition. Not all of the requested files will be WAL segment
+ files; you should also expect requests for files with a suffix of
+ .backup> or .history>. Also be aware that
+ the base name of the %p> path will be different from
+ %f>; do not expect them to be interchangeable.
The magic that makes the two loosely coupled servers work together is
- simply a restore_command> used on the standby that waits
- for the next WAL file to become available from the primary. The
- restore_command> is specified in the
+ simply a restore_command> used on the standby that,
+ when asked for the next WAL file, waits for it to become available from
+ the primary. The restore_command> is specified in the
recovery.conf> file on the standby server. Normal recovery
processing would request a file from the WAL archive, reporting failure
if the file was unavailable. For standby processing it is normal for
- the next file to be unavailable, so we must be patient and wait for
- it to appear. A waiting restore_command> can be written as
- a custom script that loops after polling for the existence of the next
- WAL file. There must also be some way to trigger failover, which should
- interrupt the restore_command>, break the loop and return
- a file-not-found error to the standby server. This ends recovery and
- the standby will then come up as a normal server.
+ the next WAL file to be unavailable, so we must be patient and wait for
+ it to appear. For files ending in .backup> or
+ .history> there is no need to wait, and a non-zero return
+ code must be returned. A waiting restore_command> can be
+ written as a custom script that loops after polling for the existence of
+ the next WAL file. There must also be some way to trigger failover, which
+ should interrupt the restore_command>, break the loop and
+ return a file-not-found error to the standby server. This ends recovery
+ and the standby will then come up as a normal server.
A working example of a waiting restore_command> is provided
- as a
contrib> module named pg_standby>. This
- example can be extended as needed to support specific configurations or
- environments.
+ as a
contrib> module named pg_standby>. It
+ should be used as a reference on how to correctly implement the logic
+ described above. It can also be extended as needed to support specific
+ configurations or environments.