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