pg_recvlogical — 控制 PostgreSQL 逻辑解码流
pg_recvlogical [option...]
pg_recvlogical用于控制逻辑解码复制槽,并从这类复制槽流式传输数据。
它会创建复制模式连接,因此除受到与pg_receivewal 相同的约束外,还要满足逻辑复制的相关约束(见Chapter 47)。
pg_recvlogical没有与逻辑解码 SQL 接口中 peek 和 get 模式等价的功能。它会在接收数据期间惰性地为这些数据发送回放确认,并在正常退出时发送确认。若要在不消费数据的情况下检查某个槽上的待处理数据,请使用pg_logical_slot_peek_changes。
在没有致命错误的情况下,pg_recvlogical会一直运行,直到收到 SIGINT(Control+C) 或 SIGTERM 信号。
当 pg_recvlogical 收到 SIGHUP 信号时, 它会关闭当前输出文件,并使用 --file 选项指定的文件名打开一个新文件。 这样就可以通过先重命名当前文件,再向 pg_recvlogical 发送 SIGHUP 信号来轮换输出文件。
至少必须指定以下选项之一,以选择要执行的操作:
--create-slot #为由--dbname指定的数据库,使用--plugin指定的输出插件, 创建一个名称由--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 开始复制。关于其影响的详细信息,请参见 Chapter 47和Section 51.4中的说明。 在其他模式下会忽略此选项。
--if-not-exists #当指定--create-slot且指定名称的槽已存在时,不报错。
-n--no-loop #当与服务器的连接丢失时,不要循环重试,直接退出。
-o name[=value]--option=name[=value] #将选项name传递给输出插件;如果指定了value, 则将其用作该选项的值。可用选项及其效果取决于所使用的输出插件。
-P plugin--plugin=plugin #创建该槽时,使用指定的逻辑解码输出插件。参见Chapter 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--port=port #指定服务器监听连接所用的 TCP 端口,或本地 Unix 域套接字文件扩展名。 默认值取自PGPORT环境变量(如果已设置), 否则使用编译时的默认值。
-U user--username=user #用于连接的用户名。默认为当前操作系统用户名。
-w--no-password #绝不提示输入密码。如果服务器要求密码认证,而密码又无法通过 .pgpass文件等其他方式获得, 则连接尝试将失败。此选项适用于批处理作业和脚本, 因为在这些场景中没有用户在场输入密码。
-W--password #强制pg_recvlogical在连接数据库之前提示输入密码。
这个选项并非必不可少,因为如果服务器要求密码认证, pg_recvlogical会自动提示输入密码。 不过,pg_recvlogical需要先浪费一次连接尝试, 才能发现服务器需要密码。在某些情况下,使用 -W来避免这次额外的连接尝试是值得的。
还可以使用下列附加选项:
当收到 SIGINT 或 SIGTERM 信号终止时, pg_recvlogical会以状态 0 退出。(这是其正常结束方式,因此不视为错误。) 遇到致命错误或其他信号时,退出状态为非零。
与大多数其他PostgreSQL工具一样,该工具使用libpq支持的环境变量(见Section 32.15)。
环境变量PG_COLOR指定是否在诊断消息中使用颜色。可能的值为always、auto和never。
如果源集簇启用了组权限,pg_recvlogical会在接收到的 WAL 文件上保留这些组权限。
示例请参见Section 47.1。
如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。