PostgreSQL 中文参考文档
🌐 英文原版 官方 ↗

E.3. 发布 18.3 #

E.3.1. 迁移到版本 18.3
E.3.2. 变更

发布日期:. 2026-02-26

本版本包含少量来自 18.2 的修复。有关主版本 18 中新特性的信息,请参见Section E.6。

E.3.1. 迁移到版本 18.3 #

对于正在运行 18.X 的用户,不需要进行转储/恢复。

但是,如果你正从早于 18.2 的版本升级,请参见Section E.4。

E.3.2. 变更 #

  • 修复在重放由较旧小版本生成的 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 值绝不会包含重复键,因此这一错误一直没有被发现。该崩溃可能由恶意或损坏的数据触发。