pg_recvlogical — 控制 PostgreSQL 逻辑解码流
pg_recvlogical
[option
...]
pg_recvlogical
控制逻辑解码复制槽以及来自这种复制槽的流数据。
它会创建一个复制模式的连接,因此它受到和pg_receivewal 相同的约束,还有逻辑复制(第 49 章)的约束。
pg_recvlogical
与逻辑解码SQL接口的peek和get模式没有等效性。它咋接收到数据以及干净地退出时,它会惰性地发送数据的确认。为了检查一个槽上还未消费的待处理数据,可以使用pg_logical_slot_peek_changes
。
至少必须指定以下选项之一以选择一个操作:
--create-slot
使用由--plugin
指定的输出插件,在由--dbname
指定的数据库中,
创建一个名为--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开始复制。有关此操作的详细信息,请参阅第 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 database
--dbname=database
要连接的数据库。这个选项的详细含义请见动作的描述。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_dump在连接到一个数据库之前提示要求一个口令。
这个选项不是必须的,因为如果服务器要求口令认证,
pg_dump将自动提示要求一个口令。
但是,pg_dump将浪费一次连接尝试
来发现服务器想要一个口令。在某些情况下,值得键入
-W
来避免额外的连接尝试。
还有下列附加选项可用:
-V
--version
打印pg_recvlogical的版本并且退出。
-?
--help
显示关于pg_recvlogical命令行参数的帮助,并且退出。
和大部分其他PostgreSQL工具相似,这个工具也使用libpq(见第 34.15 节)支持的环境变量。
环境变量PG_COLOR
规定在诊断消息中是否使用颜色。可能的值为always
、auto
、never
。
如果在源服务器上启用了组权限,pg_recvlogical将会在接收到的WAL文件上保留组权限。
一个例子请见第 49.1 节。