2024 年 9 月 26 日: PostgreSQL 17 发布!
支持版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:devel
不支持的版本:11 / 10 / 9.6 / 9.5 / 9.4

pg_recvlogical

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 的新逻辑复制槽。

可以使用 --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 文件名
--file=文件名

将接收并解码的事务数据写入此文件。对 stdout 使用 -

-F 间隔秒
--fsync-interval=间隔秒

指定 pg_recvlogical 应该多久发出 fsync() 调用以确保输出文件安全地刷新到磁盘。

服务器有时会要求客户端执行刷新并将刷新位置报告给服务器。此设置是对此的补充,以更频繁地执行刷新。

指定间隔为 0 将完全禁用发出 fsync() 调用,同时仍向服务器报告进度。在这种情况下,在发生崩溃的情况下可能会丢失数据。

-I lsn
--startpos=lsn

--start 模式下,从给定的 LSN 开始复制。有关其影响的详细信息,请参见 第 47 章第 53.4 节 中的文档。在其他模式下被忽略。

--if-not-exists

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

-n
--no-loop

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

-o 名称[=]
--option=名称[=]

使用选项值 (如果指定)将选项 名称 传递给输出插件。哪些选项存在以及它们的效果取决于使用的输出插件。

-P 插件
--plugin=插件

在创建槽时,使用指定的逻辑解码输出插件。参见 第 47 章。如果槽已经存在,则此选项无效。

-s 间隔秒
--status-interval=间隔秒

此选项与 pg_receivewal 中相同名称的选项具有相同的效果。请参见那里的描述。

-S 槽名称
--slot=槽名称

--start 模式下,使用名为 槽名称 的现有逻辑复制槽。在 --create-slot 模式下,使用此名称创建槽。在 --drop-slot 模式下,使用此名称删除槽。

-t
--two-phase

启用已准备事务的解码。此选项只能与 --create-slot 一起指定。

-v
--verbose

启用详细模式。

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

-d 数据库名
--dbname=数据库名

要连接的数据库。请参见操作的描述以了解详细信息。 数据库名 可以是 连接字符串。如果是这样,连接字符串参数将覆盖任何冲突的命令行选项。默认为用户名。

-h 主机名或 IP
--host=主机名或 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 将在被 SIGINTSIGTERM 信号终止时以状态 0 退出。(这是结束它的正常方式。因此它不是错误。)对于致命错误或其他信号,退出状态将为非零。

环境

此实用程序(与大多数其他 PostgreSQL 实用程序一样)使用 libpq 支持的环境变量(参见 第 32.15 节)。

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

备注

pg_recvlogical 如果源集群启用了组权限,将保留接收到的 WAL 文件的组权限。

示例

参见 第 47.1 节 获取示例。

另请参见

pg_receivewal

提交更正

如果您发现文档中任何不正确的内容、与您使用特定功能的体验不符或需要进一步说明,请使用 此表格 报告文档问题。