pg_recvlogical

pg_recvologic —控制 PostgreSQL 逻辑解码流

Synopsis

pg_recvlogical [ option ...]

Description

pg_recvlogical控制逻辑解码复制插槽,并从这些复制插槽流式传输数据。

它创建了一个复制模式连接,因此它受到与pg_receivewal相同的约束以及逻辑复制的约束(请参阅Chapter 49)。

pg_recvlogical不具有等效于逻辑解码 SQL 接口的 peek 和 get 模式。它在接收到数据时以及在干净退出时会延迟发送数据的重播确认。要在不占用插槽的情况下检查未决数据,请使用pg_logical_slot_peek_changes

Options

必须至少指定以下选项之一才能选择操作:

  • --create-slot

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

    • 删除名称为--slot的复制插槽,然后退出。
  • --start

    • --slot指定的逻辑复制槽开始流式传输更改,一直持续到 signal 终止为止。如果服务器端更改流以服务器关闭或断开连接结束,则除非指定--no-loop,否则请循环尝试。

流格式由创建插槽时指定的输出插件确定。

连接必须与用于创建插槽的数据库相同。

可以一起指定--create-slot--start--drop-slot不能与其他动作组合使用。

以下命令行选项控制输出和其他复制行为的位置和格式:

  • -E lsn
    --endpos=lsn

    • --start模式下,当接收到达指定的 LSN 时,将自动停止复制并以正常退出状态 0 退出。如果在不在--start模式下指定时,将引发错误。

如果存在 LSN 等于* lsn *的记录,则将输出该记录。

--endpos选项不了解事务边界,可能会在事务过程中截断输出。下次读取该插槽时,将不使用任何部分输出的事务,并且将再次重播该事务。单个消息永远不会被截断。

  • -f filename
    --file=filename

    • 将接收和解码的事务数据写入此文件。将-用于标准输出。
  • -F interval_seconds
    --fsync-interval=interval_seconds

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

服务器有时会请求 Client 端执行刷新操作,并将刷新位置报告给服务器。除此之外,此设置还可以更频繁地执行刷新。

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

  • -I lsn
    --startpos=lsn

    • --start模式下,从给定的 LSN 开始复制。有关此效果的详细信息,请参见Chapter 49Section 53.4中的文档。在其他模式下被忽略。
  • --if-not-exists

    • 指定--create-slot并且具有指定名称的插槽已存在时,请不要出错。
  • -n
    --no-loop

    • 与服务器的连接丢失时,请勿循环尝试,而只需退出即可。
  • -o name[=value]
    --option=name[=value]

    • 将选项* name 和选项值 value *传递给输出插件。存在哪些选项及其效果取决于所使用的输出插件。
  • -P plugin
    --plugin=plugin

    • 创建插槽时,请使用指定的逻辑解码输出插件。参见Chapter 49。如果插槽已存在,则此选项无效。
  • -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 连接字符串。有关更多信息,请参见Section 34.1.1。默认为用户名。
  • -h hostname-or-ip
    --host=hostname-or-ip

    • 指定运行服务器的计算机的主机名。如果该值以斜杠开头,则将其用作 Unix 域套接字的目录。默认值来自PGHOST环境变量(如果已设置),否则尝试 Unix 域套接字连接。
  • -p port
    --port=port

    • 指定服务器正在侦听连接的 TCP 端口或本地 Unix 域套接字文件 extensions。默认值是PGPORT环境变量(如果已设置)或已编译的默认值。
  • -U user
    --username=user

    • 连接的用户名。默认为当前 os 的用户名。
  • -w
    --no-password

    • 切勿发出密码提示。如果服务器要求密码验证,而其他方式(例如.pgpass文件)无法使用密码,则连接尝试将失败。该选项在没有用户 Importing 密码的批处理作业和脚本中很有用。
  • -W
    --password

    • 在连接数据库之前,强制 pg_recvologic 提示 Importing 密码。

这个选项从来都不是必须的,因为如果服务器要求密码认证,pg_recvologic 将自动提示 Importing 密码。但是,pg_recvologic 会浪费连接尝试,以发现服务器需要密码。在某些情况下,值得 Importing-W以避免额外的连接尝试。

可以使用以下附加选项:

  • -V
    --version

    • 打印 pg_recvologic 版本并退出。
  • -?
    --help

    • 显示有关 pg_recvologic 命令行参数的帮助,然后退出。

Environment

与大多数其他 PostgreSQLUtil 一样,该 Util 使用 libpq 支持的环境变量(请参见Section 34.14)。

Notes

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

Examples

有关示例,请参见Section 49.1

See Also

pg_receivewal