On this page
pg_receivewal
pg_receivewal —来自 PostgreSQL 服务器的流预写日志
Synopsis
pg_receivewal
[ option
...]
Description
pg_receivewal 用于流式传输来自运行中的 PostgreSQL 集群的预写日志。使用流复制协议对预写日志进行流处理,并将其写入文件的本地目录。该目录可以用作使用时间点恢复进行还原的存档位置(请参见Section 25.3)。
pg_receivewal 和在服务器上生成的一样,实时流式传输预写日志,并且不像archive_command那样 await 段完成。因此,在使用 pg_receivewal 时不必设置archive_timeout。
与 PostgreSQL 备用服务器的 WAL 接收器不同,默认情况下 pg_receivewal 仅在关闭 WAL 文件时才刷新 WAL 数据。必须指定选项--synchronous
以实时刷新 WAL 数据。由于 pg_receivewal 不适用 WAL,因此当synchronous_commit等于remote_apply
时,您不应允许它成为同步备用数据库。如果是这样,它将看起来像一个永远不会追上的备用数据库,并且将导致事务提交被阻塞。为了避免这种情况,您应该为synchronous_standby_names配置一个适当的值,或者为与之不匹配的 pg_receivewal 指定application_name
,或者将synchronous_commit
的值更改为remote_apply
以外的值。
预写日志通过常规 PostgreSQL 连接流式传输,并使用复制协议。必须与超级用户或具有REPLICATION
权限的用户(请参阅Section 21.2)构建连接,并且pg_hba.conf
必须允许复制连接。还必须将服务器的max_wal_senders设置得足够高,以使流至少有一个会话可用。
如果连接丢失或无法初始构建,并且发生非致命错误,则 pg_receivewal 将无限期重试连接,并尽快重新构建流。若要避免此行为,请使用-n
参数。
Options
-D directory
--directory=directory
- 将输出写入的目录。
此参数是必需的。
--if-not-exists
- 指定
--create-slot
并且具有指定名称的插槽已存在时,请不要出错。
- 指定
-n
--no-loop
- 不要循环连接错误。相反,请立即退出并出现错误。
-s interval
--status-interval=interval
- 指定状态包发送回服务器之间的秒数。这样可以更轻松地监视来自服务器的进度。零值将完全禁用定期状态更新,尽管在服务器请求时仍将发送更新,以避免超时断开连接。默认值为 10 秒。
-S slotname
--slot=slotname
- 要求 pg_receivewal 使用现有的复制插槽(请参见Section 26.2.6)。使用此选项时,pg_receivewal 将向服务器报告刷新位置,指示何时每个段都已同步到磁盘,以便服务器可以删除该段(如果不需要)。
当在服务器上将 pg_receivewal 的复制 Client 端配置为同步备用服务器时,则使用复制插槽将向服务器报告刷新位置,但仅当 WAL 文件关闭时才如此。因此,该配置将导致主数据库上的事务 await 很长时间,并且实际上无法令人满意地工作。为了使此功能正常运行,还必须指定选项--synchronous
(请参见下文)。
--synchronous
- 收到 WAL 数据后立即将其刷新到磁盘。刷新后,无论
--status-interval
怎样,都应立即将状态包发送回服务器。
- 收到 WAL 数据后立即将其刷新到磁盘。刷新后,无论
如果在服务器上将 pg_receivewal 的复制 Client 端配置为同步备用服务器,则应指定此选项,以确保及时将反馈发送到服务器。
-v
--verbose
- 启用详细模式。
-Z level
--compress=level
- 启用 gzip 压缩预写日志,并指定压缩级别(0 至 9,0 为无压缩,9 为最佳压缩)。后缀
.gz
将自动添加到所有文件名中。
- 启用 gzip 压缩预写日志,并指定压缩级别(0 至 9,0 为无压缩,9 为最佳压缩)。后缀
以下命令行选项控制数据库连接参数。
-d connstr
--dbname=connstr
- 指定用于连接到服务器的参数,作为连接字符串。有关更多信息,请参见Section 33.1.1。
为了与其他 Client 端应用程序保持一致,该选项称为--dbname
,但是由于 pg_receivewal 没有连接到集群中的任何特定数据库,因此连接字符串中的数据库名称将被忽略。
-h host
--host=host
- 指定运行服务器的计算机的主机名。如果该值以斜杠开头,则将其用作 Unix 域套接字的目录。默认值来自
PGHOST
环境变量(如果已设置),否则尝试 Unix 域套接字连接。
- 指定运行服务器的计算机的主机名。如果该值以斜杠开头,则将其用作 Unix 域套接字的目录。默认值来自
-p port
--port=port
- 指定服务器正在侦听连接的 TCP 端口或本地 Unix 域套接字文件 extensions。默认值是
PGPORT
环境变量(如果已设置)或已编译的默认值。
- 指定服务器正在侦听连接的 TCP 端口或本地 Unix 域套接字文件 extensions。默认值是
-U username
--username=username
- 连接的用户名。
-w
--no-password
- 切勿发出密码提示。如果服务器要求密码验证,而其他方式(例如
.pgpass
文件)无法使用密码,则连接尝试将失败。该选项在没有用户 Importing 密码的批处理作业和脚本中很有用。
- 切勿发出密码提示。如果服务器要求密码验证,而其他方式(例如
-W
--password
- 强制 pg_receivewal 在连接数据库之前提示 Importing 密码。
这个选项从来都不是必须的,因为如果服务器要求密码认证,pg_receivewal 将自动提示 Importing 密码。但是,pg_receivewal 将浪费连接尝试,以发现服务器需要密码。在某些情况下,值得 Importing-W
以避免额外的连接尝试。
pg_receivewal 可以执行以下两个操作之一来控制物理复制插槽:
--create-slot
- 使用
--slot
中指定的名称创建一个新的物理复制插槽,然后退出。
- 使用
--drop-slot
- 使用
--slot
中指定的名称删除复制插槽,然后退出。
- 使用
其他选项也可用:
-V
--version
- 打印 pg_receivewal 版本并退出。
-?
--help
- 显示有关 pg_receivewal 命令行参数的帮助,然后退出。
Environment
与大多数其他 PostgreSQLUtil 一样,该 Util 使用 libpq 支持的环境变量(请参见Section 33.14)。
Notes
当使用 pg_receivewal 而不是archive_command作为主要的 WAL 备份方法时,强烈建议使用复制插槽。否则,服务器可以在备份前自由回收或删除预写日志文件,因为它没有来自archive_command或复制插槽的有关 WAL 流已存储多远的任何信息。但是请注意,如果接收方跟不上 WAL 数据的获取,复制槽将填满服务器的磁盘空间。
Examples
要从位于mydbserver
的服务器流式传输预写日志并将其存储在本地目录/usr/local/pgsql/archive
中:
$ pg_receivewal -h mydbserver -D /usr/local/pgsql/archive