PostgreSQL 修复字符索引去重导致的错误结果
PostgreSQL 已提交 B-tree 去重修复:bpchar 比较会忽略尾随空格,某些等值数据却有不同的存储表示;去重把它们合并后,仅索引扫描可能返回错误值。补丁为相关操作符类禁用去重,并在主线与 19 分支处理 oidvector 的类似问题。维护者明确要求重建受影响的 bpchar 索引,单纯更新程序无法修正已有索引。补丁注明回补至 14;这是已提交修复,尚不能等同于正式小版本已发布。
pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
当天收录 26 条。
PostgreSQL 已提交 B-tree 去重修复:bpchar 比较会忽略尾随空格,某些等值数据却有不同的存储表示;去重把它们合并后,仅索引扫描可能返回错误值。补丁为相关操作符类禁用去重,并在主线与 19 分支处理 oidvector 的类似问题。维护者明确要求重建受影响的 bpchar 索引,单纯更新程序无法修正已有索引。补丁注明回补至 14;这是已提交修复,尚不能等同于正式小版本已发布。
PostgreSQL 已合入一项逻辑解码修复。事务进入失败状态后仍可能持有事务 ID,逻辑日志模式的更新必须延后;旧处理却只在事务中止路径检查,最终清理没有重新应用变更。连接随后开始的新事务便可能缺少逻辑解码所需的信息,订阅端因此静默跳过数据变化。补丁把状态更新移到事务 ID 清除之后,覆盖显式事务失败后再回滚的边界,并注明回补至 19。依赖逻辑复制或 CDC 的团队应关注后续正式版本收录情况。
pgBackRest 2.59.3 修复了未检查随机数生成结果的问题:若系统熵不足导致调用失败,旧版本可能以残留内存生成加密子密钥或盐,使备份加密强度不足。问题只涉及加密仓库,但升级程序本身不会轮换已经写入仓库元数据的子密钥,后续备份也会继续沿用它们。项目提供了检查方法;确认存在弱子密钥时,需要按公告建立新的仓库与备份链。运维团队应同时核对程序版本和已有密钥,不能把升级完成视为历史风险已经消除。
将商店、客户管理和账单库汇总到一个分析库,逻辑复制能够搬运数据,却不会自动改写模式名或同步表结构。Dimitri Fontaine 用 PostgreSQL 18 的可复现实验,说明发布端应预先划分模式,新增列与删除列也需要安排两端执行顺序。调整行过滤和列清单不会清掉订阅端已有数据;汇总库再输出 CDC 时,还须明确是否包含复制来源的变更。文章把过滤、二次解码和结构演进放在同一流程中,便于在上线前验证数据边界。
索引顾问常用 HypoPG 比较优化器成本,但成本下降不代表查询一定加速。Prateek Arora 在 PostgreSQL 16 上使用约 7 GB 的 IMDB 数据,实际创建建议索引并执行查询:179 项可测建议中,128 项至少快 15%,32 项至少慢 5%,其中 7 项耗时超过原来的两倍。行数估算错误会让新索引诱导优化器选择更差的连接计划,而假想索引仍依赖同一套估算。评估工具输出时,应在可控副本上验证真实执行时间与计划。
多个计算引擎共享 Iceberg 表时,目录必须协调元数据指针更新,避免并发写入覆盖彼此的结果。Google Cloud 介绍了其湖仓运行目录的实现:以 Spanner 的可串行化事务支撑乐观并发控制,通过 Iceberg REST 接口提供一致的表发现与提交路径,并在区域内提供高可用。目录还可按访问请求发放临时存储凭据,让引擎读取同一份数据而不必长期保管云存储密钥。文章说明的是现有目录的架构与权限边界,可用于评估多引擎湖仓的控制层。
已合入的补丁先展开连接别名,再检查横向引用,避免外连接保留行被错误丢弃,并注明回补至 14。
合成数据实验显示,接近的成本估算会使计划摇摆;多列 GIN 将交集移入索引后,该实验中的计划更稳定。
更新会清除可见性映射,而自动清理阈值按整表计算;大租户计数因此可能从仅索引扫描退化为大量回表。
对比 Odyssey、pgagroal、Supavisor 等实现时,文章强调事务池状态清理、连接共享范围和预备语句支持的差异。
单次 SQL 调用可融合向量、全文及外部检索排名,减少应用端拼接;RUM 索引保留词位置信息以支持短语查询。
示例在 Glue 6.0 中读 Parquet、写 S3 Tables;需控制单机资源,且先删后插的两步写入不具备原子性。
OAuth2 与特定 API Key 配置处理没有路径头的 CONNECT 请求时可能崩溃,新版修复两项拒绝服务问题。
3.7.14 修复 NTLM、Kerberos 连接隔离,并调整部分路由名称与冲突优先级;依赖旧名称的监控需同步修改。