pg_recvlogical
pg_recvlogical — 控制PostgreSQL逻辑解码流
概要
pg_recvlogical
[选项
...]
描述
pg_recvlogical
控制逻辑解码复制槽并从这些复制槽中流式传输数据。
它创建一个复制模式连接,因此它受与pg_receivewal相同的约束,以及逻辑复制的约束(请参阅第 49 章)。
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
filename
--file=
filename
将接收和解码的事务数据写入此文件。对 stdout 使用
-
。-F
interval_seconds
--fsync-interval=
interval_seconds
指定 pg_recvlogical 应多久发出
fsync()
调用,以确保输出文件安全地刷新到磁盘。服务器偶尔会请求客户端执行刷新并向服务器报告刷新位置。此设置是附加设置,用于更频繁地执行刷新。
指定
0
的间隔将禁用发出fsync()
调用,同时仍向服务器报告进度。在这种情况下,数据可能会在崩溃时丢失。-I
lsn
--startpos=
lsn
在
--start
模式中,从给定的 LSN 开始复制。有关此效果的详细信息,请参阅 第 49 章 和 第 55.4 节 中的文档。在其他模式中忽略。--if-not-exists
当指定
--create-slot
并且已存在具有指定名称的槽时,不要出错。-n
--no-loop
当与服务器的连接丢失时,不要循环重试,只需退出即可。
-o
name
[=value
]--option=
name
[=value
]将选项
name
传递给输出插件,如果指定了选项值value
。哪些选项存在及其效果取决于所使用的输出插件。-P
plugin
--plugin=
plugin
创建槽时,使用指定的逻辑解码输出插件。请参阅 第 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
启用详细模式。
以下命令行选项控制数据库连接参数。
-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支持的环境变量(请参见第 34.15 节)。
环境变量PG_COLOR
指定是否在诊断消息中使用颜色。可能的值为always
、auto
和never
。
注释
如果在源集群上启用了组权限,pg_recvlogical将保留接收到的 WAL 文件上的组权限。
示例
有关示例,请参见第 49.1 节。