diff options
Diffstat (limited to 'doc/src/sgml/man1/pg_standby.1')
-rw-r--r-- | doc/src/sgml/man1/pg_standby.1 | 409 |
1 files changed, 409 insertions, 0 deletions
diff --git a/doc/src/sgml/man1/pg_standby.1 b/doc/src/sgml/man1/pg_standby.1 new file mode 100644 index 0000000..0afc647 --- /dev/null +++ b/doc/src/sgml/man1/pg_standby.1 @@ -0,0 +1,409 @@ +'\" t +.\" Title: pg_standby +.\" Author: The PostgreSQL Global Development Group +.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/> +.\" Date: 2021 +.\" Manual: PostgreSQL 13.4 Documentation +.\" Source: PostgreSQL 13.4 +.\" Language: English +.\" +.TH "PG_STANDBY" "1" "2021" "PostgreSQL 13.4" "PostgreSQL 13.4 Documentation" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +pg_standby \- supports the creation of a PostgreSQL warm standby server +.SH "SYNOPSIS" +.HP \w'\fBpg_standby\fR\ 'u +\fBpg_standby\fR [\fIoption\fR...] \fIarchivelocation\fR \fInextwalfile\fR \fIwalfilepath\fR [\fIrestartwalfile\fR] +.SH "DESCRIPTION" +.PP +pg_standby +supports creation of a +\(lqwarm standby\(rq +database server\&. It is designed to be a production\-ready program, as well as a customizable template should you require specific modifications\&. +.PP +pg_standby +is designed to be a waiting +\fIrestore_command\fR, which is needed to turn a standard archive recovery into a warm standby operation\&. Other configuration is required as well, all of which is described in the main server manual (see +Section\ \&26.2)\&. +.PP +To configure a standby server to use +pg_standby, put this into its +postgresql\&.conf +configuration file: +.sp +.if n \{\ +.RS 4 +.\} +.nf +restore_command = \*(Aqpg_standby \fIarchiveDir\fR %f %p %r\*(Aq +.fi +.if n \{\ +.RE +.\} +.sp +where +\fIarchiveDir\fR +is the directory from which WAL segment files should be restored\&. +.PP +If +\fIrestartwalfile\fR +is specified, normally by using the +%r +macro, then all WAL files logically preceding this file will be removed from +\fIarchivelocation\fR\&. This minimizes the number of files that need to be retained, while preserving crash\-restart capability\&. Use of this parameter is appropriate if the +\fIarchivelocation\fR +is a transient staging area for this particular standby server, but +\fInot\fR +when the +\fIarchivelocation\fR +is intended as a long\-term WAL archive area\&. +.PP +pg_standby +assumes that +\fIarchivelocation\fR +is a directory readable by the server\-owning user\&. If +\fIrestartwalfile\fR +(or +\-k) is specified, the +\fIarchivelocation\fR +directory must be writable too\&. +.PP +There are two ways to fail over to a +\(lqwarm standby\(rq +database server when the master server fails: +.PP +Smart Failover +.RS 4 +In smart failover, the server is brought up after applying all WAL files available in the archive\&. This results in zero data loss, even if the standby server has fallen behind, but if there is a lot of unapplied WAL it can be a long time before the standby server becomes ready\&. To trigger a smart failover, create a trigger file containing the word +smart, or just create it and leave it empty\&. +.RE +.PP +Fast Failover +.RS 4 +In fast failover, the server is brought up immediately\&. Any WAL files in the archive that have not yet been applied will be ignored, and all transactions in those files are lost\&. To trigger a fast failover, create a trigger file and write the word +fast +into it\&. +pg_standby +can also be configured to execute a fast failover automatically if no new WAL file appears within a defined interval\&. +.RE +.SH "OPTIONS" +.PP +pg_standby +accepts the following command\-line arguments: +.PP +\fB\-c\fR +.RS 4 +Use +cp +or +copy +command to restore WAL files from archive\&. This is the only supported behavior so this option is useless\&. +.RE +.PP +\fB\-d\fR +.RS 4 +Print lots of debug logging output on +stderr\&. +.RE +.PP +\fB\-k\fR +.RS 4 +Remove files from +\fIarchivelocation\fR +so that no more than this many WAL files before the current one are kept in the archive\&. Zero (the default) means not to remove any files from +\fIarchivelocation\fR\&. This parameter will be silently ignored if +\fIrestartwalfile\fR +is specified, since that specification method is more accurate in determining the correct archive cut\-off point\&. Use of this parameter is +\fIdeprecated\fR +as of +PostgreSQL +8\&.3; it is safer and more efficient to specify a +\fIrestartwalfile\fR +parameter\&. A too small setting could result in removal of files that are still needed for a restart of the standby server, while a too large setting wastes archive space\&. +.RE +.PP +\fB\-r\fR \fImaxretries\fR +.RS 4 +Set the maximum number of times to retry the copy command if it fails (default 3)\&. After each failure, we wait for +\fIsleeptime\fR +* +\fInum_retries\fR +so that the wait time increases progressively\&. So by default, we will wait 5 secs, 10 secs, then 15 secs before reporting the failure back to the standby server\&. This will be interpreted as end of recovery and the standby will come up fully as a result\&. +.RE +.PP +\fB\-s\fR \fIsleeptime\fR +.RS 4 +Set the number of seconds (up to 60, default 5) to sleep between tests to see if the WAL file to be restored is available in the archive yet\&. The default setting is not necessarily recommended; consult +Section\ \&26.2 +for discussion\&. +.RE +.PP +\fB\-t\fR \fItriggerfile\fR +.RS 4 +Specify a trigger file whose presence should cause failover\&. It is recommended that you use a structured file name to avoid confusion as to which server is being triggered when multiple servers exist on the same system; for example +/tmp/pgsql\&.trigger\&.5432\&. +.RE +.PP +\fB\-V\fR +.br +\fB\-\-version\fR +.RS 4 +Print the +pg_standby +version and exit\&. +.RE +.PP +\fB\-w\fR \fImaxwaittime\fR +.RS 4 +Set the maximum number of seconds to wait for the next WAL file, after which a fast failover will be performed\&. A setting of zero (the default) means wait forever\&. The default setting is not necessarily recommended; consult +Section\ \&26.2 +for discussion\&. +.RE +.PP +\fB\-?\fR +.br +\fB\-\-help\fR +.RS 4 +Show help about +pg_standby +command line arguments, and exit\&. +.RE +.SH "NOTES" +.PP +pg_standby +is designed to work with +PostgreSQL +8\&.2 and later\&. +.PP +PostgreSQL +8\&.3 provides the +%r +macro, which is designed to let +pg_standby +know the last file it needs to keep\&. With +PostgreSQL +8\&.2, the +\-k +option must be used if archive cleanup is required\&. This option remains available in 8\&.3, but its use is deprecated\&. +.PP +PostgreSQL +8\&.4 provides the +\fIrecovery_end_command\fR +option\&. Without this option a leftover trigger file can be hazardous\&. +.PP +pg_standby +is written in C and has an easy\-to\-modify source code, with specifically designated sections to modify for your own needs +.SH "EXAMPLES" +.PP +On Linux or Unix systems, you might use: +.sp +.if n \{\ +.RS 4 +.\} +.nf +archive_command = \*(Aqcp %p \&.\&.\&./archive/%f\*(Aq + +restore_command = \*(Aqpg_standby \-d \-s 2 \-t /tmp/pgsql\&.trigger\&.5442 \&.\&.\&./archive %f %p %r 2>>standby\&.log\*(Aq + +recovery_end_command = \*(Aqrm \-f /tmp/pgsql\&.trigger\&.5442\*(Aq +.fi +.if n \{\ +.RE +.\} +.sp +where the archive directory is physically located on the standby server, so that the +\fIarchive_command\fR +is accessing it across NFS, but the files are local to the standby (enabling use of +ln)\&. This will: +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +produce debugging output in +standby\&.log +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +sleep for 2 seconds between checks for next WAL file availability +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +stop waiting only when a trigger file called +/tmp/pgsql\&.trigger\&.5442 +appears, and perform failover according to its content +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +remove the trigger file when recovery ends +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +remove no\-longer\-needed files from the archive directory +.RE +.PP +On Windows, you might use: +.sp +.if n \{\ +.RS 4 +.\} +.nf +archive_command = \*(Aqcopy %p \&.\&.\&.\e\earchive\e\e%f\*(Aq + +restore_command = \*(Aqpg_standby \-d \-s 5 \-t C:\epgsql\&.trigger\&.5442 \&.\&.\&.\earchive %f %p %r 2>>standby\&.log\*(Aq + +recovery_end_command = \*(Aqdel C:\epgsql\&.trigger\&.5442\*(Aq +.fi +.if n \{\ +.RE +.\} +.sp +Note that backslashes need to be doubled in the +\fIarchive_command\fR, but +\fInot\fR +in the +\fIrestore_command\fR +or +\fIrecovery_end_command\fR\&. This will: +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +use the +copy +command to restore WAL files from archive +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +produce debugging output in +standby\&.log +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +sleep for 5 seconds between checks for next WAL file availability +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +stop waiting only when a trigger file called +C:\epgsql\&.trigger\&.5442 +appears, and perform failover according to its content +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +remove the trigger file when recovery ends +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +remove no\-longer\-needed files from the archive directory +.RE +.PP +The +copy +command on Windows sets the final file size before the file is completely copied, which would ordinarily confuse +pg_standby\&. Therefore +pg_standby +waits +\fIsleeptime\fR +seconds once it sees the proper file size\&. GNUWin32\*(Aqs +cp +sets the file size only after the file copy is complete\&. +.PP +Since the Windows example uses +copy +at both ends, either or both servers might be accessing the archive directory across the network\&. +.SH "AUTHOR" +.PP +Simon Riggs +<simon@2ndquadrant\&.com> +.SH "SEE ALSO" +\fBpg_archivecleanup\fR(1) |