选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 当前版本 (18) / 17 / 17 / 16 / 16 / 15 / 15 / 14 / 14
测试与开发版本: 19 / 19 / devel / devel
不受支持的版本: 13 / 13 / 12 / 12 / 11 / 11 / 10 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2
历史版本PostgreSQL 9.6 已于 2021 年 11 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本

pg_receivexlog

pg_receivexlog — 从一个 PostgreSQL 服务器流式接收事务日志

大纲

pg_receivexlog [option...]

描述

pg_receivexlog 用于从一个正在运行的 PostgreSQL 集簇流式接收事务日志。事务日志使用 流复制协议接收,并写入一个本地文件目录。该目录可用作执行时间点恢复 (见第 25.3 节)时的归档位置。

pg_receivexlog 会实时流式接收服务器上正在生成的 事务日志,而不像 archive_command 那样等待段文件完成。 因此,使用 pg_receivexlog 时无需设置 archive_timeout

与 PostgreSQL 备库的 WAL 接收器不同,pg_receivexlog 默认只在 WAL 文件关闭时才刷写 WAL 数据。要实时刷写 WAL 数据,必须指定 --synchronous 选项。由于 pg_receivexlog 不应用 WAL,当 synchronous_commit 等于 remote_apply 时,不应让它成为同步备库。否则它看起来会像 一个永远追不上的备库,并导致事务提交阻塞。为避免这种情况,你应当为 synchronous_standby_names 配置合适的值,或者为 pg_receivexlog 指定一个与之不匹配的 application_name,或者把 synchronous_commit 的值改为 remote_apply 以外的其他值。

事务日志通过一个常规的 PostgreSQL 连接并使用 复制协议进行流式传输。建立连接时必须使用超级用户或具有 REPLICATION 权限的用户(参见第 21.2 节), 并且 pg_hba.conf 必须允许复制连接。服务器还必须将 max_wal_senders 设置得足够高,以便至少为该流保留一个 可用会话。

如果连接丢失,或者最初就无法建立连接,且错误不是致命的, pg_receivexlog 将无限重试连接,并尽快恢复流式传输。 要避免这种行为,可使用 -n 参数。

选项

-D directory
--directory=directory

要把输出写入的目录。

此参数为必需项。

--if-not-exists

当指定 --create-slot 而同名复制槽已存在时,不报错。

-n
--no-loop

不在连接错误上循环重试,而是立即报错退出。

-s interval
--status-interval=interval

指定向服务器发回状态包的间隔秒数。这使服务器端更容易监控进度。 值为零将完全禁用周期性状态更新,不过当服务器请求时仍会发送一次更新, 以避免超时断开连接。默认值为 10 秒。

-S slotname
--slot=slotname

要求 pg_receivexlog 使用一个现有的复制槽 (见第 26.2.6 节)。使用此选项时, pg_receivexlog 会向服务器报告刷写位置, 指明每个段何时已同步到磁盘,这样服务器就可以在不需要该段时将其删除。

pg_receivexlog 的复制客户端在服务器上 被配置为同步备库时,使用复制槽会向服务器报告刷写位置,但只在 WAL 文件关闭时报告。因此,这种配置会导致主库上的事务长时间等待,实际上 无法令人满意地工作。要使其正确工作,还必须指定 --synchronous 选项(见下文)。

--synchronous

收到 WAL 数据后立即将其刷写到磁盘。同时在刷写之后立即向服务器发回 一个状态包,而不考虑 --status-interval

如果 pg_receivexlog 的复制客户端在服务器上 被配置为同步备库,就应指定此选项,以确保向服务器发送及时的反馈。

-v
--verbose

启用详细输出模式。

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

-d connstr
--dbname=connstr

以连接字符串的形式指定用于连接服务器的参数。更多信息见 第 32.1.1 节

出于与其他客户端应用一致的考虑,该选项名为 --dbname, 但由于 pg_receivexlog 并不连接到集簇中的任何 特定数据库,连接字符串中的数据库名会被忽略。

-h host
--host=host

指定服务器所在主机的主机名。如果该值以斜杠开头,则将其用作 Unix 域 套接字所在目录。默认值取自 PGHOST 环境变量(若已设置), 否则尝试 Unix 域套接字连接。

-p port
--port=port

指定服务器监听连接所用的 TCP 端口或本地 Unix 域套接字文件扩展名。 默认为 PGPORT 环境变量(若已设置),否则为编译时的 内置默认值。

-U username
--username=username

要用来连接的用户名。

-w
--no-password

绝不提示输入密码。如果服务器要求密码认证,而密码又无法通过诸如 .pgpass 文件等其他方式获得,则连接尝试将失败。 该选项可用于没有用户在场输入密码的批处理作业和脚本。

-W
--password

强制 pg_receivexlog 在连接数据库之前提示 输入密码。

该选项绝非必需,因为如果服务器要求密码认证, pg_receivexlog 会自动提示输入密码。不过, pg_receivexlog 会浪费一次连接尝试来发现 服务器需要密码。在某些情况下,输入 -W 可以避免这次 额外的连接尝试。

为了控制物理复制槽,pg_receivexlog 可以执行 以下两种动作之一:

--create-slot

--slot 指定的名称创建一个新的物理复制槽,然后退出。

--drop-slot

删除以 --slot 指定名称的复制槽,然后退出。

还有其他一些可用选项:

-V
--version

打印 pg_receivexlog 的版本并退出。

-?
--help

显示有关 pg_receivexlog 命令行参数的帮助 并退出。

环境

和大部分其他 PostgreSQL 工具一样,这个工具也使用 libpq 支持的环境变量(参见第 32.14 节)。

注解

当使用 pg_receivexlog 而不是 archive_command 作为主要 WAL 备份方法时,强烈建议使用 复制槽。否则,服务器可以随意回收或删除尚未备份的事务日志文件,因为它无法从 archive_command 或复制槽获得 WAL 流已被归档到什么位置的 任何信息。但请注意,如果接收端没有及时获取 WAL 数据,复制槽会占满服务器的 磁盘空间。

示例

要从位于 mydbserver 的服务器流式接收事务日志,并把它存储 到本地目录 /usr/local/pgsql/archive

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

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。