Postgresql 中文操作指南

pg_recvlogical

pg_recvlogical — 控制 PostgreSQL 逻辑解码流

Synopsis

pg_recvlogical [ option …​]

Description

pg_recvlogical 控制逻辑解码复制槽,并从这些复制槽流式传输数据。

它创建一个复制模式连接,因此它受到与 pg_receivewal 相同的约束,加上逻辑复制的约束(请参阅 Chapter 49 )。

pg_recvlogical 没有逻辑解码 SQL 接口的 peek 和 get 模式的等效项。它在接收到数据时懒惰发送数据重播确认,并在退出干净时发送数据重播确认。若要在槽上检查待处理数据而无需使用它,请使用 pg_logical_slot_peek_changes

在没有致命错误的情况下,pg_recvlogical 将运行,直至被 SIGINT ( Control + C ) 或 SIGTERM 信号终止。

Options

必须至少指定以下一个选项才能选择一个动作:

  • —​create-slot

    • 使用 —​plugin 指定的输出插件,为 —​dbname 指定的数据库创建一个新逻辑复制槽,其中 —​slot 指定了该槽的名称。

    • 可以使用 —​two-phase—​create-slot 启用已准备事务的解码。

  • —​drop-slot

    • 删除由 —​slot 指定的名称的复制槽,然后退出。

  • —​start

    • 从由 —​slot 指定的逻辑复制槽开始流式传输更改,直到由一个信号终止为止。如果服务器端更改流以服务器关闭或断开连接结束,则无限次重试,除非指定了 —​no-loop

    • 流格式由在创建槽时指定的输出插件决定。

    • 连接必须是用于创建槽的同一个数据库。

—​create-slot—​start 可以一起指定。 —​drop-slot 不能与其他动作组合在一起。

下面的命令行选项控制输出和其他复制行为的位置和格式:

  • -E _lsn—​endpos=_lsn

    • —​start 模式的接收达到指定的 LSN 时,自动停止复制并以正常的退出状态 0 退出。如果不处于 —​start 模式的指定状态时,则会引发错误。

    • 如果有一条记录的 LSN 完全等于 lsn ,则会输出这条记录。

    • —​endpos 选项不了解事务边界并可能在事务过程中截断输出的一部分。任何部分输出的事务都将不会消耗,并且当接下来读取该槽时会重新播放。个别消息永不会被截断。

  • -f _filename—​file=_filename

    • 将接收到的已解码事务数据写入这个文件。使用 - 表示 stdout。

  • -F _interval_seconds—​fsync-interval=_interval_seconds

    • 指定 pg_recvlogical 发出多少次 fsync() 调用来确保输出文件安全地刷新到磁盘。

    • 服务器偶尔会要求客户端执行一个刷新,并向服务器报告刷新位置。此设置除了此设置外,以便更频繁地执行刷新。

    • 指定 0 间隔将禁用全部发出 fsync() 调用,同时仍然向服务器报告进度。在这种情况下,在崩溃时数据可能会丢失。

  • -I _lsn—​startpos=_lsn

    • —​start 模式的给定 LSN 中开始复制。有关此效果的详细信息,请参阅 Chapter 49Section 55.4 中的文档。在其他模式中被忽略。

  • —​if-not-exists

    • 在指定了 —​create-slot 并且具有指定名称的槽已经存在的情况下,不产生错误。

  • -n_—​no-loop_

    • 当与服务器的连接丢失时,不要无限次重试,只需退出。

  • -o _name[role="=value"]—​option=_name[=value_]_

    • 将选项 name 传递给输出插件,如果指定,则为选项值 value 。存在哪些选项及其效果取决于所使用的输出插件。

  • -P _plugin—​plugin=_plugin

    • 在创建插槽时,使用指定的逻辑解码输出插件。请参阅 Chapter 49 。如果该槽已经存在,则此选项没有效果。

  • -s _interval_seconds—​status-interval=_interval_seconds

    • 此选项与 pg_receivewal 中的同名选项的效果相同。请参阅那里的描述。

  • -S _slot_name—​slot=_slot_name

    • —​start 模式中,使用名为 slot_name 的现有逻辑复制槽。在 —​create-slot 模式中,使用此名称创建该槽。在 —​drop-slot 模式中,使用此名称删除该槽。

  • -t_—​two-phase_

    • 启用准备好的事务解码。此选项只能与 —​create-slot 一起指定。

  • -v_—​verbose_

    • Enables verbose mode.

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

  • -d _dbname—​dbname=_dbname

    • 要连接的数据库。有关此选项在具体意义上的详细说明,请参阅操作描述。 dbname 可以是 connection string 。如果是这样,则连接字符串参数将覆盖所有有冲突的命令行选项。默认为用户名。

  • -h _hostname-or-ip—​host=_hostname-or-ip

    • 指定服务器运行所在机器的主机名。如果该值以斜线开头,则将其用作 Unix 域套接字的目录。如果没有设置,则默认从 PGHOST 环境变量中获取,否则尝试建立 Unix 域套接字连接。

  • -p _port—​port=_port

    • 指定服务器侦听连接的 TCP 端口或本地 Unix 域套接字文件扩展名。如果没有设置,则默认为 PGPORT 环境变量,或编译时默认值。

  • -U _user—​username=_user

    • 以该用户身份连接。默认为当前操作系统用户名。

  • -w_—​no-password_

    • 永不发出密码提示。如果服务器需要密码验证但其他方法(如 .pgpass 文件)无法提供密码,连接尝试将失败。此选项可在无人执行密码输入的批处理作业和脚本中使用。

  • -W_—​password_

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

    • 此选项永远不会是必需的,因为如果服务器要求密码身份验证,则 pg_recvlogical 会自动提示输入密码。然而,pg_recvlogical 会尝试浪费一次连接来找出服务器是否需要密码。在某些情况下,输入 -W 以避免额外的连接尝试是值得的。

以下其他选项可用:

  • -V_—​version_

    • 打印 pg_recvlogical 版本并退出。

  • -?_—​help_

    • 显示有关 pg_recvlogical 命令行参数的帮助,然后退出。

Exit Status

当 pg_recvlogical 被 SIGINT 或 SIGTERM 信号终止时,它将退出,状态码为 0。(这是结束它的正常方式。因此它不是错误。)对于致命错误或其他信号,退出状态将为非零。

Environment

此实用工具与大多数其他 PostgreSQL 实用工具类似,它使用 libpq 所支持的环境变量(请参阅 Section 34.15 )。

环境变量 PG_COLOR 指定是否在诊断消息中使用颜色。可能的值是 alwaysautonever

Notes

如果已在源集群上启用组权限,则 pg_recvlogical 将保留收到的 WAL 文件上的组权限。

Examples

有关示例,请参阅 Section 49.1

See Also