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 终止它。
必须指定以下选项中的至少一个来选择操作
--create-slot
对于由 --dbname
指定的数据库,使用由 --plugin
指定的输出插件,创建具有由 --slot
指定的名称的新逻辑复制槽。
可以在 --create-slot
中指定 --two-phase
以启用已预处理事务的解码。
--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 开始复制。有关对此的影响的详细信息,请参阅 第 47 章 和 第 53.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
--two-phase
启用已准备事务的解码。此选项只能与 --create-slot
同时指定。
-v
--verbose
启用详细模式。
以下命令行选项控制数据库连接参数。
-d dbname
--dbname=dbname
要连接的数据库。有关此项的详细说明,请参见对操作的描述。dbname
可以为连接字符串。如果是,则连接字符串参数将覆盖所有冲突的命令行选项。默认为用户名。
-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命令行参数的帮助,并退出。
当收到 SIGINT 或 SIGTERM 信号时,pg_recvlogical 将以状态 0 退出。(这是结束它的正常方式。因此这不是一个错误。)对于致命错误或其他信号,退出状态将为非零值。
此实用程序像大多数其他 PostgreSQL 实用程序一样,使用 libpq 支持的环境变量(请参阅 第 32.15 节)。
环境变量 PG_COLOR
指定是否在诊断消息中使用颜色。可能的值为 always
、auto
和 never
。
如果在源集群上启用了组权限,pg_recvlogical 会保留接收到的 WAL 文件上的组权限。
请参阅 第 47.1 节,了解示例。