发布日期:. 2026-02-26
本版本包含少量来自 18.2 的修复。有关主版本 18 中新特性的信息,请参见Section E.6。
修复在重放由较旧小版本生成的 WAL 中的 multixid 截断记录后出现的失败(Heikki Linnakangas) §
用于应对以前版本处理 multixid 回卷方式的逻辑存在错误,导致重放失败,并出现诸如“无法访问事务状态”之类的消息。可能发生这种情况的一个典型场景是:最新小版本的备用服务器正在消费来自较旧版本主服务器的 WAL。
避免 substring() 被应用于
“TOAST 化的”数据时错误地报告无效编码(Noah Misch)
§
§
§
针对 CVE-2026-2006 的修复过于激进,在实际有效的情形下也可能抛出关于不完整字符的错误。
修复 CVE-2026-2007 修复中的疏漏(Zsolt Parragi) §
如果由于输入包含的三元组(trigram)数量超过初始估计而需要扩展“边界”数组,generate_trgm_only
就不会把修改后的数组指针返回给调用者。这会导致
strict_word_similarity() 及相关函数产生不正确的输出,或者在少数情况下导致崩溃。仅当输入字符串被转换为小写后变得更长时,才会执行到这段有缺陷的代码。目前已知发生这种情况的唯一场合,是在某些单字节编码下使用 ICU
区域设置。
修复 json_strip_nulls()
和 jsonb_strip_nulls() 的易变性标记(Andrew Dunstan)
§
这些函数一直被视为 immutable,但版本 18 中的重构意外地把它们改标成了 stable。这会阻止它们在索引表达式中使用,并可能在查询中造成不必要的重复求值。此修复纠正了新初始化数据库集簇中的标记(包括那些通过 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,则会产生“类型 0 的缓存查找失败”错误。
修复 contrib/hstore 的二进制输入函数中可能出现的空指针解引用(Michael Paquier)
§
hstore 的接收函数在遇到包含重复键的输入时会崩溃。由 Postgres 生成的 hstore 值绝不会包含重复键,因此这一错误一直没有被发现。该崩溃可能由恶意或损坏的数据触发。