mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-04 04:06:49 +02:00
b8b6a0124b
Was wrong in commit 1a9388bd0f
.
Reported-by: Tom Lane, Justin Pryzby
Discussion: https://postgr.es/m/20201102063333.GE22691@telsasoft.com
Backpatch-through: 9.5
473 lines
16 KiB
Plaintext
473 lines
16 KiB
Plaintext
<!--
|
|
doc/src/sgml/ref/pg_receivewal.sgml
|
|
PostgreSQL documentation
|
|
-->
|
|
|
|
<refentry id="app-pgreceivewal">
|
|
<indexterm zone="app-pgreceivewal">
|
|
<primary>pg_receivewal</primary>
|
|
</indexterm>
|
|
|
|
<refmeta>
|
|
<refentrytitle><application>pg_receivewal</application></refentrytitle>
|
|
<manvolnum>1</manvolnum>
|
|
<refmiscinfo>Application</refmiscinfo>
|
|
</refmeta>
|
|
|
|
<refnamediv>
|
|
<refname>pg_receivewal</refname>
|
|
<refpurpose>stream write-ahead logs from a <productname>PostgreSQL</productname> server</refpurpose>
|
|
</refnamediv>
|
|
|
|
<refsynopsisdiv>
|
|
<cmdsynopsis>
|
|
<command>pg_receivewal</command>
|
|
<arg rep="repeat"><replaceable>option</replaceable></arg>
|
|
</cmdsynopsis>
|
|
</refsynopsisdiv>
|
|
|
|
<refsect1>
|
|
<title>Description</title>
|
|
<para>
|
|
<application>pg_receivewal</application> is used to stream the write-ahead log
|
|
from a running <productname>PostgreSQL</productname> cluster. The write-ahead
|
|
log is streamed using the streaming replication protocol, and is written
|
|
to a local directory of files. This directory can be used as the archive
|
|
location for doing a restore using point-in-time recovery (see
|
|
<xref linkend="continuous-archiving"/>).
|
|
</para>
|
|
|
|
<para>
|
|
<application>pg_receivewal</application> streams the write-ahead
|
|
log in real time as it's being generated on the server, and does not wait
|
|
for segments to complete like <xref linkend="guc-archive-command"/> does.
|
|
For this reason, it is not necessary to set
|
|
<xref linkend="guc-archive-timeout"/> when using
|
|
<application>pg_receivewal</application>.
|
|
</para>
|
|
|
|
<para>
|
|
Unlike the WAL receiver of a PostgreSQL standby server, <application>pg_receivewal</application>
|
|
by default flushes WAL data only when a WAL file is closed.
|
|
The option <option>--synchronous</option> must be specified to flush WAL data
|
|
in real time. Since <application>pg_receivewal</application> does not
|
|
apply WAL, you should not allow it to become a synchronous standby when
|
|
<xref linkend="guc-synchronous-commit"/> equals
|
|
<literal>remote_apply</literal>. If it does, it will appear to be a
|
|
standby that never catches up, and will cause transaction commits to
|
|
block. To avoid this, you should either configure an appropriate value
|
|
for <xref linkend="guc-synchronous-standby-names"/>, or specify
|
|
<varname>application_name</varname> for
|
|
<application>pg_receivewal</application> that does not match it, or
|
|
change the value of <varname>synchronous_commit</varname> to
|
|
something other than <literal>remote_apply</literal>.
|
|
</para>
|
|
|
|
<para>
|
|
The write-ahead log is streamed over a regular
|
|
<productname>PostgreSQL</productname> connection and uses the replication
|
|
protocol. The connection must be made with a user having
|
|
<literal>REPLICATION</literal> permissions (see
|
|
<xref linkend="role-attributes"/>) or a superuser, and
|
|
<filename>pg_hba.conf</filename> must permit the replication connection.
|
|
The server must also be configured with
|
|
<xref linkend="guc-max-wal-senders"/> set high enough to leave at least
|
|
one session available for the stream.
|
|
</para>
|
|
|
|
<para>
|
|
If the connection is lost, or if it cannot be initially established,
|
|
with a non-fatal error, <application>pg_receivewal</application> will
|
|
retry the connection indefinitely, and reestablish streaming as soon
|
|
as possible. To avoid this behavior, use the <literal>-n</literal>
|
|
parameter.
|
|
</para>
|
|
|
|
<para>
|
|
In the absence of fatal errors, <application>pg_receivewal</application>
|
|
will run until terminated by the <systemitem>SIGINT</systemitem> signal
|
|
(<keycombo action="simul"><keycap>Control</keycap><keycap>C</keycap></keycombo>).
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1>
|
|
<title>Options</title>
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><option>-D <replaceable class="parameter">directory</replaceable></option></term>
|
|
<term><option>--directory=<replaceable class="parameter">directory</replaceable></option></term>
|
|
<listitem>
|
|
<para>
|
|
Directory to write the output to.
|
|
</para>
|
|
<para>
|
|
This parameter is required.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>-E <replaceable>lsn</replaceable></option></term>
|
|
<term><option>--endpos=<replaceable>lsn</replaceable></option></term>
|
|
<listitem>
|
|
<para>
|
|
Automatically stop replication and exit with normal exit status 0 when
|
|
receiving reaches the specified LSN.
|
|
</para>
|
|
|
|
<para>
|
|
If there is a record with LSN exactly equal to <replaceable>lsn</replaceable>,
|
|
the record will be processed.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--if-not-exists</option></term>
|
|
<listitem>
|
|
<para>
|
|
Do not error out when <option>--create-slot</option> is specified
|
|
and a slot with the specified name already exists.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>-n</option></term>
|
|
<term><option>--no-loop</option></term>
|
|
<listitem>
|
|
<para>
|
|
Don't loop on connection errors. Instead, exit right away with
|
|
an error.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--no-sync</option></term>
|
|
<listitem>
|
|
<para>
|
|
This option causes <command>pg_receivewal</command> to not force WAL
|
|
data to be flushed to disk. This is faster, but means that a
|
|
subsequent operating system crash can leave the WAL segments corrupt.
|
|
Generally, this option is useful for testing but should not be used
|
|
when doing WAL archiving on a production deployment.
|
|
</para>
|
|
|
|
<para>
|
|
This option is incompatible with <literal>--synchronous</literal>.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>-s <replaceable class="parameter">interval</replaceable></option></term>
|
|
<term><option>--status-interval=<replaceable class="parameter">interval</replaceable></option></term>
|
|
<listitem>
|
|
<para>
|
|
Specifies the number of seconds between status packets sent back to the
|
|
server. This allows for easier monitoring of the progress from server.
|
|
A value of zero disables the periodic status updates completely,
|
|
although an update will still be sent when requested by the server, to
|
|
avoid timeout disconnect. The default value is 10 seconds.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>-S <replaceable>slotname</replaceable></option></term>
|
|
<term><option>--slot=<replaceable class="parameter">slotname</replaceable></option></term>
|
|
<listitem>
|
|
<para>
|
|
Require <application>pg_receivewal</application> to use an existing
|
|
replication slot (see <xref linkend="streaming-replication-slots"/>).
|
|
When this option is used, <application>pg_receivewal</application> will report
|
|
a flush position to the server, indicating when each segment has been
|
|
synchronized to disk so that the server can remove that segment if it
|
|
is not otherwise needed.
|
|
</para>
|
|
|
|
<para>
|
|
When the replication client
|
|
of <application>pg_receivewal</application> is configured on the
|
|
server as a synchronous standby, then using a replication slot will
|
|
report the flush position to the server, but only when a WAL file is
|
|
closed. Therefore, that configuration will cause transactions on the
|
|
primary to wait for a long time and effectively not work
|
|
satisfactorily. The option <literal>--synchronous</literal> (see
|
|
below) must be specified in addition to make this work correctly.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--synchronous</option></term>
|
|
<listitem>
|
|
<para>
|
|
Flush the WAL data to disk immediately after it has been received. Also
|
|
send a status packet back to the server immediately after flushing,
|
|
regardless of <literal>--status-interval</literal>.
|
|
</para>
|
|
|
|
<para>
|
|
This option should be specified if the replication client
|
|
of <application>pg_receivewal</application> is configured on the
|
|
server as a synchronous standby, to ensure that timely feedback is
|
|
sent to the server.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>-v</option></term>
|
|
<term><option>--verbose</option></term>
|
|
<listitem>
|
|
<para>
|
|
Enables verbose mode.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>-Z <replaceable class="parameter">level</replaceable></option></term>
|
|
<term><option>--compress=<replaceable class="parameter">level</replaceable></option></term>
|
|
<listitem>
|
|
<para>
|
|
Enables gzip compression of write-ahead logs, and specifies the
|
|
compression level (0 through 9, 0 being no compression and 9 being best
|
|
compression). The suffix <filename>.gz</filename> will
|
|
automatically be added to all filenames.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
|
|
<para>
|
|
The following command-line options control the database connection parameters.
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><option>-d <replaceable class="parameter">connstr</replaceable></option></term>
|
|
<term><option>--dbname=<replaceable class="parameter">connstr</replaceable></option></term>
|
|
<listitem>
|
|
<para>
|
|
Specifies parameters used to connect to the server, as a <link
|
|
linkend="libpq-connstring">connection string</link>; these
|
|
will override any conflicting command line options.
|
|
</para>
|
|
<para>
|
|
The option is called <literal>--dbname</literal> for consistency with other
|
|
client applications, but because <application>pg_receivewal</application>
|
|
doesn't connect to any particular database in the cluster, database
|
|
name in the connection string will be ignored.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>-h <replaceable class="parameter">host</replaceable></option></term>
|
|
<term><option>--host=<replaceable class="parameter">host</replaceable></option></term>
|
|
<listitem>
|
|
<para>
|
|
Specifies the host name of the machine on which the server is
|
|
running. If the value begins with a slash, it is used as the
|
|
directory for the Unix domain socket. The default is taken
|
|
from the <envar>PGHOST</envar> environment variable, if set,
|
|
else a Unix domain socket connection is attempted.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>-p <replaceable class="parameter">port</replaceable></option></term>
|
|
<term><option>--port=<replaceable class="parameter">port</replaceable></option></term>
|
|
<listitem>
|
|
<para>
|
|
Specifies the TCP port or local Unix domain socket file
|
|
extension on which the server is listening for connections.
|
|
Defaults to the <envar>PGPORT</envar> environment variable, if
|
|
set, or a compiled-in default.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>-U <replaceable>username</replaceable></option></term>
|
|
<term><option>--username=<replaceable class="parameter">username</replaceable></option></term>
|
|
<listitem>
|
|
<para>
|
|
User name to connect as.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>-w</option></term>
|
|
<term><option>--no-password</option></term>
|
|
<listitem>
|
|
<para>
|
|
Never issue a password prompt. If the server requires
|
|
password authentication and a password is not available by
|
|
other means such as a <filename>.pgpass</filename> file, the
|
|
connection attempt will fail. This option can be useful in
|
|
batch jobs and scripts where no user is present to enter a
|
|
password.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>-W</option></term>
|
|
<term><option>--password</option></term>
|
|
<listitem>
|
|
<para>
|
|
Force <application>pg_receivewal</application> to prompt for a
|
|
password before connecting to a database.
|
|
</para>
|
|
|
|
<para>
|
|
This option is never essential, since
|
|
<application>pg_receivewal</application> will automatically prompt
|
|
for a password if the server demands password authentication.
|
|
However, <application>pg_receivewal</application> will waste a
|
|
connection attempt finding out that the server wants a password.
|
|
In some cases it is worth typing <option>-W</option> to avoid the extra
|
|
connection attempt.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</para>
|
|
|
|
<para>
|
|
<application>pg_receivewal</application> can perform one of the two
|
|
following actions in order to control physical replication slots:
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><option>--create-slot</option></term>
|
|
<listitem>
|
|
<para>
|
|
Create a new physical replication slot with the name specified in
|
|
<option>--slot</option>, then exit.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>--drop-slot</option></term>
|
|
<listitem>
|
|
<para>
|
|
Drop the replication slot with the name specified in
|
|
<option>--slot</option>, then exit.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</para>
|
|
|
|
<para>
|
|
Other options are also available:
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><option>-V</option></term>
|
|
<term><option>--version</option></term>
|
|
<listitem>
|
|
<para>
|
|
Print the <application>pg_receivewal</application> version and exit.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><option>-?</option></term>
|
|
<term><option>--help</option></term>
|
|
<listitem>
|
|
<para>
|
|
Show help about <application>pg_receivewal</application> command line
|
|
arguments, and exit.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
</variablelist>
|
|
</para>
|
|
|
|
</refsect1>
|
|
|
|
<refsect1>
|
|
<title>Exit Status</title>
|
|
|
|
<para>
|
|
<application>pg_receivewal</application> will exit with status 0 when
|
|
terminated by the <systemitem>SIGINT</systemitem> signal. (That is the
|
|
normal way to end it. Hence it is not an error.) For fatal errors or
|
|
other signals, the exit status will be nonzero.
|
|
</para>
|
|
|
|
</refsect1>
|
|
|
|
<refsect1>
|
|
<title>Environment</title>
|
|
|
|
<para>
|
|
This utility, like most other <productname>PostgreSQL</productname> utilities,
|
|
uses the environment variables supported by <application>libpq</application>
|
|
(see <xref linkend="libpq-envars"/>).
|
|
</para>
|
|
|
|
<para>
|
|
The environment variable <envar>PG_COLOR</envar> specifies whether to use
|
|
color in diagnostic messages. Possible values are
|
|
<literal>always</literal>, <literal>auto</literal> and
|
|
<literal>never</literal>.
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1>
|
|
<title>Notes</title>
|
|
|
|
<para>
|
|
When using <application>pg_receivewal</application> instead of
|
|
<xref linkend="guc-archive-command"/> as the main WAL backup method, it is
|
|
strongly recommended to use replication slots. Otherwise, the server is
|
|
free to recycle or remove write-ahead log files before they are backed up,
|
|
because it does not have any information, either
|
|
from <xref linkend="guc-archive-command"/> or the replication slots, about
|
|
how far the WAL stream has been archived. Note, however, that a
|
|
replication slot will fill up the server's disk space if the receiver does
|
|
not keep up with fetching the WAL data.
|
|
</para>
|
|
|
|
<para>
|
|
<application>pg_receivewal</application> will preserve group permissions on
|
|
the received WAL files if group permissions are enabled on the source
|
|
cluster.
|
|
</para>
|
|
|
|
</refsect1>
|
|
|
|
<refsect1>
|
|
<title>Examples</title>
|
|
|
|
<para>
|
|
To stream the write-ahead log from the server at
|
|
<literal>mydbserver</literal> and store it in the local directory
|
|
<filename>/usr/local/pgsql/archive</filename>:
|
|
<screen>
|
|
<prompt>$</prompt> <userinput>pg_receivewal -h mydbserver -D /usr/local/pgsql/archive</userinput>
|
|
</screen></para>
|
|
</refsect1>
|
|
|
|
<refsect1>
|
|
<title>See Also</title>
|
|
|
|
<simplelist type="inline">
|
|
<member><xref linkend="app-pgbasebackup"/></member>
|
|
</simplelist>
|
|
</refsect1>
|
|
|
|
</refentry>
|