pg_recvlogical — 控制 PostgreSQL 逻辑解码流
pg_recvlogical [选项...]
pg_recvlogical 控制逻辑解码复制槽并从这些复制槽中流式传输数据。
它创建一个复制模式连接,因此它受到与 pg_receivewal 相同的约束,外加逻辑复制的约束(参见 第 47 章)。
pg_recvlogical 没有相当于逻辑解码 SQL 接口的 peek 和 get 模式。它在接收到数据时以及在正常退出时惰性地发送重放确认。要检查槽上的待处理数据而不消耗它,请使用 pg_logical_slot_peek_changes。
在没有致命错误的情况下,pg_recvlogical 将一直运行,直到被 SIGINT(Control+C)或 SIGTERM 信号终止。
当 pg_recvlogical 收到 SIGHUP 信号时,它会关闭当前的输出文件,并使用 --file 选项指定的_文件名_打开一个新文件。这允许我们通过先重命名当前文件,然后发送 SIGHUP 信号给 pg_recvlogical 来轮换输出文件。
必须指定以下至少一个选项来选择一个操作
--create-slot使用 --plugin 指定的输出插件,为 --dbname 指定的数据库,创建一个名为 --slot 的新逻辑复制槽。
此操作需要 --slot 和 --dbname。
可以_与 --create-slot 一起指定 --enable-two-phase 和 --enable-failover 选项。
--drop-slot删除名为 --slot 的复制槽,然后退出。
此操作需要 --slot。
--start开始从名为 --slot 的逻辑复制槽流式传输更改,直到被信号终止。如果服务器端的更改流以服务器关机或断开连接结束,则会进行循环重试,除非指定了 --no-loop。
此操作需要 --slot、--dbname 和 --file。
流的格式由创建槽时指定的输出插件确定。
连接必须是用于创建槽的同一个数据库。
--create-slot 和 --start 可以一起指定。--drop-slot 不能与其他操作组合。
以下命令行选项控制输出的位置和格式以及其他复制行为
-E lsn--endpos=lsn在 --start 模式下,当接收达到指定的 LSN 时,自动停止复制并以正常退出状态 0 退出。如果在非 --start 模式下指定,则会引发错误。
如果存在 LSN 精确等于 lsn 的记录,则该记录将被输出。
--endpos 选项不了解事务边界,并可能在事务中间截断输出。任何部分输出的事务都不会被消耗,并在下次读取槽时重新播放。单个消息永远不会被截断。
--enable-failover启用槽的同步到备用服务器。此选项只能与 --create-slot 一起指定。
-f filename--file=filename将接收到的已解码的事务数据写入此文件。使用 - 表示 stdout。
此参数对于 --start 是必需的。
-F interval_seconds--fsync-interval=interval_seconds指定 pg_recvlogical 应多久执行一次 fsync() 调用,以确保输出文件被安全地刷新到磁盘。
服务器会偶尔要求客户端执行刷新并将刷新位置报告给服务器。此设置是其附加的,用于更频繁地执行刷新。
指定间隔 0 会完全禁用 fsync() 调用,同时仍将进度报告给服务器。在这种情况下,数据可能会在崩溃时丢失。
-I lsn--startpos=lsn在 --start 模式下,从给定的 LSN 开始复制。有关此效果的详细信息,请参阅 第 47 章 和 第 54.4 节 中的文档。在其他模式下被忽略。
--if-not-exists当指定 --create-slot 并且具有指定名称的槽已存在时,不报错。
-n--no-loop当与服务器的连接丢失时,不要循环重试,直接退出。
-o name[=value]--option=name[=value]将选项 name 传递给输出插件,如果指定了,则传递选项值 value。存在的选项及其效果取决于所使用的输出插件。
-P plugin--plugin=plugin创建槽时,使用指定的逻辑解码输出插件。参见 第 47 章。如果槽已存在,此选项无效。
-s interval_seconds--status-interval=interval_seconds此选项与 pg_receivewal 中同名选项的作用相同。参见那里的描述。
-S slot_name--slot=slot_name在 --start 模式下,使用名为 slot_name 的现有逻辑复制槽。在 --create-slot 模式下,创建具有此名称的槽。在 --drop-slot 模式下,删除具有此名称的槽。
此参数对于任何操作都是必需的。
-t--enable-two-phase--two-phase (已弃用)启用已准备事务的解码。此选项只能与 --create-slot 一起指定。
-v--verbose启用详细模式。
以下命令行选项控制数据库连接参数。
-d dbname--dbname=dbname要连接的数据库。有关详细说明,请参阅操作的描述。 dbname 可以是 连接字符串。如果是,连接字符串参数将覆盖任何冲突的命令行选项。
此参数对于 --create-slot 和 --start 是必需的。
-h hostname-or-ip--host=hostname-or-ip指定服务器运行所在计算机的主机名。如果值以斜杠开头,则将其用作 Unix 域套接字的目录。默认值取自 PGHOST 环境变量(如果已设置),否则尝试 Unix 域套接字连接。
-p 端口--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 命令行参数的帮助,然后退出。
pg_recvlogical 在被 SIGINT 或 SIGTERM 信号终止时将以状态 0 退出。(这是正常结束它的方式。因此它不是错误。)对于致命错误或其他信号,退出状态将是非零的。
此实用程序与大多数其他 PostgreSQL 实用程序一样,使用 libpq 支持的环境变量(参见 第 32.15 节)。
环境变量 PG_COLOR 指定是否在诊断消息中使用颜色。可能的值为 always、auto 和 never。
pg_recvlogical 将在源集群上启用组权限时保留接收到的 WAL 文件的组权限。
参见 第 47.1 节 获取示例。