9.3 9.4 9.5 9.6 10 11 12 13 14
阿里云PostgreSQL 问题报告 纠错本页面

pg_recvlogical

pg_recvlogical — 控制 PostgreSQL 逻辑解码流

大纲

pg_recvlogical [option...]

描述

pg_recvlogical控制逻辑解码复制槽以及来自这种复制槽的流数据。

它会创建一个复制模式的连接,因此它受到和pg_receivewal 相同的约束,还有逻辑复制(第 48 章)的约束。

pg_recvlogical没有等同于逻辑解码SQL接口的窥视和获取模式。 它会在收到数据并在干净的退出时延迟地发送重播确认。 检查插槽上未处理的数据而不使用它,使用 pg_logical_slot_peek_changes

选项

必须至少要指定下列选项之一来选择一个动作:

--create-slot

--dbname指定的数据库用--slot 指定的名称创建一个新的逻辑复制槽,使用 --plugin指定的输出插件。

--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 开始复制。这个参数的 效果请见第 48 章第 52.4 节中的文档。在其他模式中会忽略这个参数。

--if-not-exists

当指定--create-slot并且具有指定名称 的槽已经存在时不要抛出错误。

-n
--no-loop

当服务器连接丢失时,不要在循环中重试,直接退出。

-o name[=value]
--option=name[=value]

如果指定了输出插件,把选项值value 传递给选项name。存在哪些选项以及它们的效果 取决于使用的输出插件。

-P plugin
--plugin=plugin

在创建一个槽时使用指定的逻辑解码输出插件。 见第 48 章。如果该槽已经存在,这个选项没有效果。

-s interval_seconds
--status-interval=interval_seconds

这个选项和pg_receivewal中的同名选项具有 相同的效果。请参考那里的描述。

-S slot_name
--slot=slot_name

--start模式中,使用名为slot_name 的已有逻辑复制槽。在--create-slot模式中,使用这个名称 创建该槽。在--drop-slot模式中,删除这个名称指定的槽。

-v
--verbose

开启详细输出模式。

下列命令行选项控制数据库连接参数。

-d database
--dbname=database

要连接的数据库。这个选项的详细含义请见动作的描述。它可以是一个 libpq连接 字符串,详见第 33.1.1 节。默认为用户名。

-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(见第 33.14 节)支持的环境变量。

例子

一个例子请见第 48.1 节

另见

pg_receivewal