E.3. 发布版本 18.3 #
发布日期: 2026-02-26
本次发布包含来自 18.2 的少量修复。有关 18 主版本新特性的说明,请参见第 E.6 节。
E.3.2. 变更 #
修复在重放由较旧小版本生成的 WAL 多事务 ID 截断记录后发生失败的问题(Heikki Linnakangas)§
为兼容旧版本处理多事务 ID 回卷方式而编写的错误逻辑,会导致重放失败,并出现诸如“could not access status of transaction”之类的消息。一种典型场景是:最新小版本的备库正在消费来自较旧版本主库的 WAL。
避免在对“经过 TOAST 处理”的数据应用
substring()时误报无效编码(Noah Misch)§ § §针对 CVE-2026-2006 的修复过于激进,在原本合法的情况下也可能报出字符不完整错误。
修复针对 CVE-2026-2007 的修复中遗漏的问题(Zsolt Parragi)§
如果因为输入包含的三字符组比初始估计更多而需要扩展“bounds”数组,
generate_trgm_only没有把修改后的数组指针返回给调用者。这会导致strict_word_similarity()及相关函数输出错误,极少数情况下还会崩溃。如果输入字符串在转换为小写后变长,就会触发这段错误代码。目前已知仅会在某些单字节编码配合 ICU 区域设置时发生这种情况。修复
json_strip_nulls()和jsonb_strip_nulls()的波动性标记(Andrew Dunstan)§这些函数一直被视为不可变,但在版本 18 的重构中却意外被标记为稳定。这会阻止它们被用于索引表达式,并可能导致查询中不必要的重复求值。该修复会纠正在新初始化的数据库集簇中的标记(包括通过 pg_upgrade 升级到 18.3 或更高版本的集簇)。但是,它无法帮助使用 18.0 到 18.2 创建的现有集簇。
如果这一错误影响到了你对这些函数的使用,建议对现有集簇执行手工目录更新。以超级用户身份在每个受影响的数据库中执行:
UPDATE pg_catalog.pg_proc SET provolatile = 'i' WHERE oid IN ('3261','3262');同时也要更新
template0和template1,这样将来新建的数据库也会带有该修复。修复对
LATERAL UNION ALL子查询输出可能将其置空的外连接集合的计算(Richard Guo)§这一错误可能导致系统误以为某些
NOT NULL测试没有必要,从而跳过这些测试,最终产生错误的查询结果。避免用户自定义约束与自动命名的
NOT NULL约束发生名称冲突(Laurenz Albe)§从版本 18 开始,
NOT NULL约束拥有完整的pg_constraint条目,因此需要名字。对未命名NOT NULL约束选择名称的逻辑,未能避免与同一CREATE TABLE语句中用户编写的其他约束发生冲突。修复
pg_stat_get_backend_wait_event()和pg_stat_get_backend_wait_event_type(),使其能够为辅助进程返回值(Heikki Linnakangas)§此前,这些函数对辅助进程返回 NULL,但这与
pg_stat_activity视图的行为不一致。修复在从 PL/pgSQL 函数返回其值时,将复合类型变量转换为域类型的问题(Tom Lane)§
如果该变量的值为 NULL,则会出现“cache lookup failed for type 0”错误。
修复
contrib/hstore二进制输入函数中潜在的空指针解引用问题(Michael Paquier)§hstore的接收函数在输入包含重复键时会崩溃。由 PostgreSQL 生成的hstore值永远不会包含重复键,因此这一错误一直未被发现。恶意构造或损坏的数据都可能触发该崩溃。
报告文档问题
阅读 上游文档. 通过 PostgreSQL 文档反馈表单.