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
使用--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 文件名
--file=文件名
将接收到的和解码的事务数据写入此文件。对于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 名称
[=值
]
--option=名称
[=值
]
将选项 name
传递给输出插件,如果指定了,则使用选项值 value
。哪些选项存在及其效果取决于所使用的输出插件。
-P 插件
--plugin=插件
创建槽时,请使用指定的逻辑解码输出插件。请参阅第 47 章。如果槽已存在,则此选项无效。
-s interval_seconds
--status-interval=interval_seconds
此选项具有与pg_receivewal中同名选项相同的效果。请参阅那里的描述。
-S 槽名称
--slot=槽名称
在--start
模式下,使用名为槽名称
的现有逻辑复制槽。在--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=端口
指定服务器侦听连接的 TCP 端口或本地 Unix 域套接字文件扩展名。默认为PGPORT
环境变量(如果已设置)或编译时的默认值。
-U 用户
--username=用户
要连接的用户名。默认为当前操作系统用户名。
-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 节。
如果您在文档中发现任何不正确、与您使用特定功能的经验不符或需要进一步澄清的内容,请使用此表格来报告文档问题。