PostgreSQL码农集散地

PostgreSQL 18 preview - pg_recvlogical 支持创建 failover slot

PostgreSQL 18 preview - pg_recvlogical 支持创建 failover slot

failover slot是16引入的概念, 解决了用户在使用了逻辑订阅时, 如果上游结点发生了基于流复制的主从切换后, slot需要重建, 并且丢失逻辑数据的风险.

pg_recvlogical 是一个用于从 PostgreSQL 服务器接收逻辑解码产生的变更流的客户端工具。通常用于测试、调试逻辑复制或构建自定义的复制解决方案。

使用 pg_recvlogical 创建一个新的逻辑复制槽 (logical replication slot) 时,如果同时指定了 --failover 选项,那么创建出来的这个槽就会被标记为启用了故障转移 (failover) 功能。

https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=cf2655a9029aff63dd567dbbdcdee15ec969905d

pg_recvlogical: Add --failover option.  
author Masahiko Sawada <[email protected]>   
Fri, 4 Apr 2025 17:39:57 +0000 (10:39 -0700)  
committer Masahiko Sawada <[email protected]>   
Fri, 4 Apr 2025 17:39:57 +0000 (10:39 -0700)  
commit cf2655a9029aff63dd567dbbdcdee15ec969905d  
tree f44b8d2018d11e917f59a04f6d122455de9ada95 tree  
parent 3556c89321e8baa2242288bd4f015efd1e9d6be0 commit | diff  
pg_recvlogical: Add --failover option.  

This new option instructs pg_recvlogical to create the logical  
replication slot with the failover option enabled. It can be used in
conjunction with the --create-slot option.  

Author: Hayato Kuroda <[email protected]>  
Reviewed-by: Michael Banck <[email protected]>  
Reviewed-by: Masahiko Sawada <[email protected]>  
Discussion: https://postgr.es/m/OSCPR01MB14966C54097FC83AF19F3516BF5AC2@OSCPR01MB14966.jpnprd01.prod.outlook.com  

<option>--failover</option>  

Enables the slot to be synchronized to the standbys. This option may only be specified with <option>--create-slot</option>  

AI 解读

补丁名称:pg_recvlogical: Add --failover option. (为 pg_recvlogical 添加 --failover 选项)

核心内容:

这个补丁为 PostgreSQL 的命令行工具 pg_recvlogical 增加了一个新的选项:--failover。

  • pg_recvlogical 是什么?

    • 它是一个用于从 PostgreSQL 服务器接收逻辑解码产生的变更流的客户端工具。通常用于测试、调试逻辑复制或构建自定义的复制解决方案。
  • --failover 选项的作用是什么?

    • 当你在使用 pg_recvlogical 创建一个新的逻辑复制槽 (logical replication slot) 时,如果同时指定了 --failover 选项,那么创建出来的这个槽就会被标记为启用了故障转移 (failover) 功能。
  • 如何使用?

    • 这个 --failover 选项必须与 --create-slot 选项一起使用。因为 --failover 是在 创建 槽的时候指定的一个属性。
    • 示例命令(概念性):pg_recvlogical --create-slot --slot my_slot_name --plugin test_decoding --dbname=mydb --failover
  • “启用故障转移 (failover option enabled)”意味着什么?

    • 这是 PostgreSQL 16 引入的一个特性。对于标记为支持 failover 的逻辑复制槽,如果当前消费该槽的连接意外断开,服务器允许另一个连接(通常是在备库或其他高可用节点上)接管这个槽并继续消费数据流,而不会丢失数据。这对于构建高可用的逻辑复制下游至关重要。

总结:

这个补丁非常直接:它让用户能够通过 pg_recvlogical 这个标准工具,在创建逻辑复制槽时就指定其需要支持故障转移。这简化了在高可用性 (HA) 环境下配置逻辑复制槽的过程。以前可能需要通过 SQL 命令 CREATE_REPLICATION_SLOT ... (FAILOVER) 来创建这样的槽,现在可以直接用 pg_recvlogical 的命令行选项完成。