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参数。

在没有致命错误的情况下,pg_receivewal 将运行直到被 SIGINTsignal( Control C )终止。

Options

此参数是必需的。

如果存在 LSN 等于* lsn *的记录,则将处理该记录。

此选项与--synchronous不兼容。

当在服务器上将 pg_receivewal 的复制 Client 端配置为同步备用服务器时,则使用复制插槽将向服务器报告刷新位置,但仅当 WAL 文件关闭时才如此。因此,该配置将导致主数据库上的事务 await 很长时间,并且实际上无法令人满意地工作。为了使此功能正常运行,还必须指定选项--synchronous(请参见下文)。

如果在服务器上将 pg_receivewal 的复制 Client 端配置为同步备用服务器,则应指定此选项,以确保及时将反馈发送到服务器。

以下命令行选项控制数据库连接参数。

为了与其他 Client 端应用程序保持一致,该选项称为--dbname,但是由于 pg_receivewal 没有连接到集群中的任何特定数据库,因此连接字符串中的数据库名称将被忽略。

这个选项从来都不是必须的,因为如果服务器要求密码认证,pg_receivewal 将自动提示 Importing 密码。但是,pg_receivewal 将浪费连接尝试,以发现服务器需要密码。在某些情况下,值得 Importing-W以避免额外的连接尝试。

pg_receivewal 可以执行以下两个操作之一来控制物理复制插槽:

其他选项也可用:

Exit Status

当被 SIGINTsignal 终止时,pg_receivewal 将以状态 0 退出。 (这是结束它的正常方法.因此,这不是错误.)对于致命错误或其他 signal,退出状态将为非零。

Environment

与大多数其他 PostgreSQLUtil 一样,该 Util 使用 libpq 支持的环境变量(请参见Section 34.14)。

Notes

当使用 pg_receivewal 而不是archive_command作为主要的 WAL 备份方法时,强烈建议使用复制插槽。否则,服务器可以在备份前自由回收或删除预写日志文件,因为它没有来自archive_command或复制插槽的有关 WAL 流已存储多远的任何信息。但是请注意,如果接收方跟不上 WAL 数据的获取,复制槽将填满服务器的磁盘空间。

如果在源集群上启用了组权限,pg_receivewal 将保留接收到的 WAL 文件的组权限。

Examples

要从位于mydbserver的服务器流式传输预写日志并将其存储在本地目录/usr/local/pgsql/archive中:

$ pg_receivewal -h mydbserver -D /usr/local/pgsql/archive

See Also

pg_basebackup

上一章 首页 下一章