summaryrefslogtreecommitdiff
path: root/doc/src/sgml/recovery-config.sgml
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src/sgml/recovery-config.sgml')
-rw-r--r--doc/src/sgml/recovery-config.sgml510
1 files changed, 0 insertions, 510 deletions
diff --git a/doc/src/sgml/recovery-config.sgml b/doc/src/sgml/recovery-config.sgml
deleted file mode 100644
index a2bdffda94..0000000000
--- a/doc/src/sgml/recovery-config.sgml
+++ /dev/null
@@ -1,510 +0,0 @@
-<!-- doc/src/sgml/recovery-config.sgml -->
-
-<chapter id="recovery-config">
- <title>Recovery Configuration</title>
-
- <indexterm>
- <primary>configuration</primary>
- <secondary>of recovery</secondary>
- <tertiary>of a standby server</tertiary>
- </indexterm>
-
- <para>
- This chapter describes the settings available in the
- <filename>recovery.conf</filename><indexterm><primary>recovery.conf</primary></indexterm>
- file. They apply only for the duration of the
- recovery. They must be reset for any subsequent recovery you wish to
- perform. They cannot be changed once recovery has begun.
- </para>
-
- <para>
- Settings in <filename>recovery.conf</filename> are specified in the format
- <literal>name = 'value'</literal>. One parameter is specified per line.
- Hash marks (<literal>#</literal>) designate the rest of the
- line as a comment. To embed a single quote in a parameter
- value, write two quotes (<literal>''</literal>).
- </para>
-
- <para>
- A sample file, <filename>share/recovery.conf.sample</filename>,
- is provided in the installation's <filename>share/</filename> directory.
- </para>
-
- <sect1 id="archive-recovery-settings">
-
- <title>Archive Recovery Settings</title>
- <variablelist>
-
- <varlistentry id="restore-command" xreflabel="restore_command">
- <term><varname>restore_command</varname> (<type>string</type>)
- <indexterm>
- <primary><varname>restore_command</varname> recovery parameter</primary>
- </indexterm>
- </term>
- <listitem>
- <para>
- The local shell command to execute to retrieve an archived segment of
- the WAL file series. This parameter is required for archive recovery,
- but optional for streaming replication.
- Any <literal>%f</literal> in the string is
- replaced by the name of the file to retrieve from the archive,
- and any <literal>%p</literal> is replaced by the copy destination path name
- on the server.
- (The path name is relative to the current working directory,
- i.e., the cluster's data directory.)
- Any <literal>%r</literal> is replaced by the name of the file containing the
- last valid restart point. That is the earliest file that must be kept
- to allow a restore to be restartable, so this information can be used
- to truncate the archive to just the minimum required to support
- restarting from the current restore. <literal>%r</literal> is typically only
- used by warm-standby configurations
- (see <xref linkend="warm-standby"/>).
- Write <literal>%%</literal> to embed an actual <literal>%</literal> character.
- </para>
-
- <para>
- It is important for the command to return a zero exit status
- only if it succeeds. The command <emphasis>will</emphasis> be asked for file
- names that are not present in the archive; it must return nonzero
- when so asked. Examples:
-<programlisting>
-restore_command = 'cp /mnt/server/archivedir/%f "%p"'
-restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"' # Windows
-</programlisting>
- An exception is that if the command was terminated by a signal (other
- than <systemitem>SIGTERM</systemitem>, which is used as part of a
- database server shutdown) or an error by the shell (such as command
- not found), then recovery will abort and the server will not start up.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="archive-cleanup-command" xreflabel="archive_cleanup_command">
- <term><varname>archive_cleanup_command</varname> (<type>string</type>)
- <indexterm>
- <primary><varname>archive_cleanup_command</varname> recovery parameter</primary>
- </indexterm>
- </term>
- <listitem>
- <para>
- This optional parameter specifies a shell command that will be executed
- at every restartpoint. The purpose of
- <varname>archive_cleanup_command</varname> is to provide a mechanism for
- cleaning up old archived WAL files that are no longer needed by the
- standby server.
- Any <literal>%r</literal> is replaced by the name of the file containing the
- last valid restart point.
- That is the earliest file that must be <emphasis>kept</emphasis> to allow a
- restore to be restartable, and so all files earlier than <literal>%r</literal>
- may be safely removed.
- This information can be used to truncate the archive to just the
- minimum required to support restart from the current restore.
- The <xref linkend="pgarchivecleanup"/> module
- is often used in <varname>archive_cleanup_command</varname> for
- single-standby configurations, for example:
-<programlisting>archive_cleanup_command = 'pg_archivecleanup /mnt/server/archivedir %r'</programlisting>
- Note however that if multiple standby servers are restoring from the
- same archive directory, you will need to ensure that you do not delete
- WAL files until they are no longer needed by any of the servers.
- <varname>archive_cleanup_command</varname> would typically be used in a
- warm-standby configuration (see <xref linkend="warm-standby"/>).
- Write <literal>%%</literal> to embed an actual <literal>%</literal> character in the
- command.
- </para>
- <para>
- If the command returns a nonzero exit status then a warning log
- message will be written. An exception is that if the command was
- terminated by a signal or an error by the shell (such as command not
- found), a fatal error will be raised.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="recovery-end-command" xreflabel="recovery_end_command">
- <term><varname>recovery_end_command</varname> (<type>string</type>)
- <indexterm>
- <primary><varname>recovery_end_command</varname> recovery parameter</primary>
- </indexterm>
- </term>
- <listitem>
- <para>
- This parameter specifies a shell command that will be executed once only
- at the end of recovery. This parameter is optional. The purpose of the
- <varname>recovery_end_command</varname> is to provide a mechanism for cleanup
- following replication or recovery.
- Any <literal>%r</literal> is replaced by the name of the file containing the
- last valid restart point, like in <xref linkend="archive-cleanup-command"/>.
- </para>
- <para>
- If the command returns a nonzero exit status then a warning log
- message will be written and the database will proceed to start up
- anyway. An exception is that if the command was terminated by a
- signal or an error by the shell (such as command not found), the
- database will not proceed with startup.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
-
- </sect1>
-
- <sect1 id="recovery-target-settings">
-
- <title>Recovery Target Settings</title>
-
- <para>
- By default, recovery will recover to the end of the WAL log. The
- following parameters can be used to specify an earlier stopping point.
- At most one of <varname>recovery_target</varname>,
- <varname>recovery_target_lsn</varname>, <varname>recovery_target_name</varname>,
- <varname>recovery_target_time</varname>, or <varname>recovery_target_xid</varname>
- can be used; if more than one of these is specified in the configuration
- file, the last entry will be used.
- </para>
-
- <variablelist>
- <varlistentry id="recovery-target" xreflabel="recovery_target">
- <term><varname>recovery_target</varname><literal> = 'immediate'</literal>
- <indexterm>
- <primary><varname>recovery_target</varname> recovery parameter</primary>
- </indexterm>
- </term>
- <listitem>
- <para>
- This parameter specifies that recovery should end as soon as a
- consistent state is reached, i.e. as early as possible. When restoring
- from an online backup, this means the point where taking the backup
- ended.
- </para>
- <para>
- Technically, this is a string parameter, but <literal>'immediate'</literal>
- is currently the only allowed value.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="recovery-target-name" xreflabel="recovery_target_name">
- <term><varname>recovery_target_name</varname> (<type>string</type>)
- <indexterm>
- <primary><varname>recovery_target_name</varname> recovery parameter</primary>
- </indexterm>
- </term>
- <listitem>
- <para>
- This parameter specifies the named restore point (created with
- <function>pg_create_restore_point()</function>) to which recovery will proceed.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="recovery-target-time" xreflabel="recovery_target_time">
- <term><varname>recovery_target_time</varname> (<type>timestamp</type>)
- <indexterm>
- <primary><varname>recovery_target_time</varname> recovery parameter</primary>
- </indexterm>
- </term>
- <listitem>
- <para>
- This parameter specifies the time stamp up to which recovery
- will proceed.
- The precise stopping point is also influenced by
- <xref linkend="recovery-target-inclusive"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="recovery-target-xid" xreflabel="recovery_target_xid">
- <term><varname>recovery_target_xid</varname> (<type>string</type>)
- <indexterm>
- <primary><varname>recovery_target_xid</varname> recovery parameter</primary>
- </indexterm>
- </term>
- <listitem>
- <para>
- This parameter specifies the transaction ID up to which recovery
- will proceed. Keep in mind
- that while transaction IDs are assigned sequentially at transaction
- start, transactions can complete in a different numeric order.
- The transactions that will be recovered are those that committed
- before (and optionally including) the specified one.
- The precise stopping point is also influenced by
- <xref linkend="recovery-target-inclusive"/>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="recovery-target-lsn" xreflabel="recovery_target_lsn">
- <term><varname>recovery_target_lsn</varname> (<type>pg_lsn</type>)
- <indexterm>
- <primary><varname>recovery_target_lsn</varname> recovery parameter</primary>
- </indexterm>
- </term>
- <listitem>
- <para>
- This parameter specifies the LSN of the write-ahead log location up
- to which recovery will proceed. The precise stopping point is also
- influenced by <xref linkend="recovery-target-inclusive"/>. This
- parameter is parsed using the system data type
- <link linkend="datatype-pg-lsn"><type>pg_lsn</type></link>.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
-
- <para>
- The following options further specify the recovery target, and affect
- what happens when the target is reached:
- </para>
-
- <variablelist>
- <varlistentry id="recovery-target-inclusive"
- xreflabel="recovery_target_inclusive">
- <term><varname>recovery_target_inclusive</varname> (<type>boolean</type>)
- <indexterm>
- <primary><varname>recovery_target_inclusive</varname> recovery parameter</primary>
- </indexterm>
- </term>
- <listitem>
- <para>
- Specifies whether to stop just after the specified recovery target
- (<literal>true</literal>), or just before the recovery target
- (<literal>false</literal>).
- Applies when <xref linkend="recovery-target-lsn"/>,
- <xref linkend="recovery-target-time"/>, or
- <xref linkend="recovery-target-xid"/> is specified.
- This setting controls whether transactions
- having exactly the target WAL location (LSN), commit time, or transaction ID, respectively, will
- be included in the recovery. Default is <literal>true</literal>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="recovery-target-timeline"
- xreflabel="recovery_target_timeline">
- <term><varname>recovery_target_timeline</varname> (<type>string</type>)
- <indexterm>
- <primary><varname>recovery_target_timeline</varname> recovery parameter</primary>
- </indexterm>
- </term>
- <listitem>
- <para>
- Specifies recovering into a particular timeline. The default is
- to recover along the same timeline that was current when the
- base backup was taken. Setting this to <literal>latest</literal> recovers
- to the latest timeline found in the archive, which is useful in
- a standby server. Other than that you only need to set this parameter
- in complex re-recovery situations, where you need to return to
- a state that itself was reached after a point-in-time recovery.
- See <xref linkend="backup-timelines"/> for discussion.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="recovery-target-action"
- xreflabel="recovery_target_action">
- <term><varname>recovery_target_action</varname> (<type>enum</type>)
- <indexterm>
- <primary><varname>recovery_target_action</varname> recovery parameter</primary>
- </indexterm>
- </term>
- <listitem>
- <para>
- Specifies what action the server should take once the recovery target is
- reached. The default is <literal>pause</literal>, which means recovery will
- be paused. <literal>promote</literal> means the recovery process will finish
- and the server will start to accept connections.
- Finally <literal>shutdown</literal> will stop the server after reaching the
- recovery target.
- </para>
- <para>
- The intended use of the <literal>pause</literal> setting is to allow queries
- to be executed against the database to check if this recovery target
- is the most desirable point for recovery.
- The paused state can be resumed by
- using <function>pg_wal_replay_resume()</function> (see
- <xref linkend="functions-recovery-control-table"/>), which then
- causes recovery to end. If this recovery target is not the
- desired stopping point, then shut down the server, change the
- recovery target settings to a later target and restart to
- continue recovery.
- </para>
- <para>
- The <literal>shutdown</literal> setting is useful to have the instance ready
- at the exact replay point desired. The instance will still be able to
- replay more WAL records (and in fact will have to replay WAL records
- since the last checkpoint next time it is started).
- </para>
- <para>
- Note that because <filename>recovery.conf</filename> will not be renamed when
- <varname>recovery_target_action</varname> is set to <literal>shutdown</literal>,
- any subsequent start will end with immediate shutdown unless the
- configuration is changed or the <filename>recovery.conf</filename> file is
- removed manually.
- </para>
- <para>
- This setting has no effect if no recovery target is set.
- If <xref linkend="guc-hot-standby"/> is not enabled, a setting of
- <literal>pause</literal> will act the same as <literal>shutdown</literal>.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </sect1>
-
- <sect1 id="standby-settings">
-
- <title>Standby Server Settings</title>
- <variablelist>
-
- <varlistentry id="standby-mode" xreflabel="standby_mode">
- <term><varname>standby_mode</varname> (<type>boolean</type>)
- <indexterm>
- <primary><varname>standby_mode</varname> recovery parameter</primary>
- </indexterm>
- </term>
- <listitem>
- <para>
- Specifies whether to start the <productname>PostgreSQL</productname> server as
- a standby. If this parameter is <literal>on</literal>, the server will
- not stop recovery when the end of archived WAL is reached, but
- will keep trying to continue recovery by fetching new WAL segments
- using <varname>restore_command</varname>
- and/or by connecting to the primary server as specified by the
- <varname>primary_conninfo</varname> setting.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry id="primary-conninfo" xreflabel="primary_conninfo">
- <term><varname>primary_conninfo</varname> (<type>string</type>)
- <indexterm>
- <primary><varname>primary_conninfo</varname> recovery parameter</primary>
- </indexterm>
- </term>
- <listitem>
- <para>
- Specifies a connection string to be used for the standby server
- to connect with the primary. This string is in the format
- described in <xref linkend="libpq-connstring"/>. If any option is
- unspecified in this string, then the corresponding environment
- variable (see <xref linkend="libpq-envars"/>) is checked. If the
- environment variable is not set either, then
- defaults are used.
- </para>
- <para>
- The connection string should specify the host name (or address)
- of the primary server, as well as the port number if it is not
- the same as the standby server's default.
- Also specify a user name corresponding to a suitably-privileged role
- on the primary (see
- <xref linkend="streaming-replication-authentication"/>).
- A password needs to be provided too, if the primary demands password
- authentication. It can be provided in the
- <varname>primary_conninfo</varname> string, or in a separate
- <filename>~/.pgpass</filename> file on the standby server (use
- <literal>replication</literal> as the database name).
- Do not specify a database name in the
- <varname>primary_conninfo</varname> string.
- </para>
- <para>
- This setting has no effect if <varname>standby_mode</varname> is <literal>off</literal>.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry id="primary-slot-name" xreflabel="primary_slot_name">
- <term><varname>primary_slot_name</varname> (<type>string</type>)
- <indexterm>
- <primary><varname>primary_slot_name</varname> recovery parameter</primary>
- </indexterm>
- </term>
- <listitem>
- <para>
- Optionally specifies an existing replication slot to be used when
- connecting to the primary via streaming replication to control
- resource removal on the upstream node
- (see <xref linkend="streaming-replication-slots"/>).
- This setting has no effect if <varname>primary_conninfo</varname> is not
- set.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry id="trigger-file" xreflabel="trigger_file">
- <term><varname>trigger_file</varname> (<type>string</type>)
- <indexterm>
- <primary><varname>trigger_file</varname> recovery parameter</primary>
- </indexterm>
- </term>
- <listitem>
- <para>
- Specifies a trigger file whose presence ends recovery in the
- standby. Even if this value is not set, you can still promote
- the standby using <command>pg_ctl promote</command> or calling
- <function>pg_promote</function>.
- This setting has no effect if <varname>standby_mode</varname> is <literal>off</literal>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry id="recovery-min-apply-delay" xreflabel="recovery_min_apply_delay">
- <term><varname>recovery_min_apply_delay</varname> (<type>integer</type>)
- <indexterm>
- <primary><varname>recovery_min_apply_delay</varname> recovery parameter</primary>
- </indexterm>
- </term>
- <listitem>
- <para>
- By default, a standby server restores WAL records from the
- primary as soon as possible. It may be useful to have a time-delayed
- copy of the data, offering opportunities to correct data loss errors.
- This parameter allows you to delay recovery by a fixed period of time,
- measured in milliseconds if no unit is specified. For example, if
- you set this parameter to <literal>5min</literal>, the standby will
- replay each transaction commit only when the system time on the standby
- is at least five minutes past the commit time reported by the master.
- </para>
- <para>
- It is possible that the replication delay between servers exceeds the
- value of this parameter, in which case no delay is added.
- Note that the delay is calculated between the WAL time stamp as written
- on master and the current time on the standby. Delays in transfer
- because of network lag or cascading replication configurations
- may reduce the actual wait time significantly. If the system
- clocks on master and standby are not synchronized, this may lead to
- recovery applying records earlier than expected; but that is not a
- major issue because useful settings of this parameter are much larger
- than typical time deviations between servers.
- </para>
- <para>
- The delay occurs only on WAL records for transaction commits.
- Other records are replayed as quickly as possible, which
- is not a problem because MVCC visibility rules ensure their effects
- are not visible until the corresponding commit record is applied.
- </para>
- <para>
- The delay occurs once the database in recovery has reached a consistent
- state, until the standby is promoted or triggered. After that the standby
- will end recovery without further waiting.
- </para>
- <para>
- This parameter is intended for use with streaming replication deployments;
- however, if the parameter is specified it will be honored in all cases.
-
- <varname>hot_standby_feedback</varname> will be delayed by use of this feature
- which could lead to bloat on the master; use both together with care.
-
- <warning>
- <para>
- Synchronous replication is affected by this setting when <varname>synchronous_commit</varname>
- is set to <literal>remote_apply</literal>; every <literal>COMMIT</literal>
- will need to wait to be applied.
- </para>
- </warning>
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </sect1>
-
-</chapter>