首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >PostgreSQL 19 魔法字符将被抛弃

PostgreSQL 19 魔法字符将被抛弃

作者头像
用户4035096
发布2026-07-09 18:51:54
发布2026-07-09 18:51:54
50
举报

PostgreSQL 19 preview - 协议扩展: 新增宏替代魔法字符

https://github.com/postgres/postgres/commit/9ea3b6f751abd7701f3f32d9df26d66410754c94

该提交(9ea3b6f751abd7701f3f32d9df26d66410754c94)的主要内容和意义如下:

变更解读

标题: Expand usage of macros for protocol characters 作者: Nathan Bossart 提交时间: 2025-08-06 链接: https://github.com/postgres/postgres/commit/9ea3b6f751abd7701f3f32d9df26d66410754c94

主要内容
  • 本次提交将协议消息中的“魔法字符(protocol characters)”硬编码,替换为了统一的宏定义(macro)。
  • 新增了多个宏,如 PqReplMsg_*PqBackupMsg_*,分别用于复制、备份相关的特殊消息。
  • 在多处代码(如流复制、逻辑复制、BaseBackup、pg_basebackup工具等)用宏替换了原本的字符字面量,如 'w''k''r''m'等。
  • src/include/libpq/protocol.h 头文件中集中定义了这些宏,提升了可维护性和可读性,降低了出错风险。
影响范围
  • 逻辑和物理复制协议
  • BaseBackup 相关备份协议
  • 客户端工具(如pg_basebackup、pg_recvlogical等)
  • 代码中所有涉及协议符号的地方均由宏定义统一

使用示例

以物理复制和 BaseBackup 协议为例:

1. 后端发送 WAL 数据

原代码(伪代码):

代码语言:javascript
复制
pq_sendbyte(ctx->out, 'w'); // 发送WAL数据  

新代码:

代码语言:javascript
复制
pq_sendbyte(ctx->out, PqReplMsg_WALData);  
2. 客户端接收消息类型

原代码:

代码语言:javascript
复制
if (copybuf[0] == 'k') { ... } // 保活消息  

新代码:

代码语言:javascript
复制
if (copybuf[0] == PqReplMsg_Keepalive) { ... }  
3. 备份流程中处理新归档文件

原代码:

代码语言:javascript
复制
switch (GetCopyDataByte(...)) {  
  case 'n': // 新归档  
    ...  
}  

新代码:

代码语言:javascript
复制
switch (GetCopyDataByte(...)) {  
  case PqBackupMsg_NewArchive:  
    ...  
}  
4. 定义宏(src/include/libpq/protocol.h)
代码语言:javascript
复制
#define PqReplMsg_Keepalive         'k'  
#define PqReplMsg_WALData           'w'  
#define PqReplMsg_StandbyStatusUpdate 'r'  
#define PqBackupMsg_NewArchive      'n'  
#define PqBackupMsg_ProgressReport  'p'  
#define PqBackupMsg_Manifest        'm'  

总结

此次提交将协议相关的关键字母全部用宏封装,便于后续协议拓展和维护,也减少了开发者“魔法字符”误用、出错的可能性。所有涉及协议通信的地方都推荐采用这些宏。


参考链接
  • 该提交详情
  • protocol.h 新增宏定义

如需进一步了解如何在自己的代码中应用这些宏,请告知具体使用场景。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-08-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 digoal德哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PostgreSQL 19 preview - 协议扩展: 新增宏替代魔法字符
    • 变更解读
      • 主要内容
      • 影响范围
    • 使用示例
      • 1. 后端发送 WAL 数据
      • 2. 客户端接收消息类型
      • 3. 备份流程中处理新归档文件
      • 4. 定义宏(src/include/libpq/protocol.h)
    • 总结
      • 参考链接
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档