阅读(2807) (12)

PostgreSQL pg_recvlogical

2021-08-23 15:46:54 更新

pg_recvlogical — 控制 PostgreSQL 逻辑解码流

大纲

pg_recvlogical [option...]

描述

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

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

pg_recvlogical与逻辑解码SQL接口的peek和get模式没有等效性。它咋接收到数据以及干净地退出时,它会惰性地发送数据的确认。为了检查一个槽上还未消费的待处理数据,可以使用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

要连接的数据库。这个选项的详细含义请见动作的描述。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(见第 33.14 节)支持的环境变量。

环境变量PG_COLOR规定在诊断消息中是否使用颜色。可能的值为alwaysautonever

注解

如果在源服务器上启用了组权限,pg_recvlogical将会在接收到的WAL文件上保留组权限。

例子

一个例子请见第 48.1 节