发布日期:. 2026-08-13
本次发布包含来自 16.14 的多项修复。 有关 16 主版本新特性的说明,请参见 Section E.16.
对于运行 16.X 的用户,不需要执行导出/恢复。
但是,下面前三个安全条目描述了更新后可能需要进行的配置调整和数据清理。
此外,如果使用 contrib/btree_gist 或 contrib/ltree,可能需要为这些扩展创建的索引重建索引; 请参见下面的相关条目。
此外,如果是从早于 16.10 的版本升级,请参见 Section E.6。
将逻辑解码输出插件限制为新服务器参数 output_plugin_libraries 指定的集合 (Jacob Champion) §
此前,复制用户可以为逻辑解码选择任意可加载库,从而实施各种攻击。 为了在不破坏原有可用配置的情况下收紧这一限制,现引入一份允许使用的 输出插件列表。
默认情况下,只有随 PostgreSQL 提供的输出插件 (pgoutput 和 test_decoding)会包含在 output_plugin_libraries 中。使用其他输出插件的安装必须在 更新服务器后将其加入该参数,例如:
output_plugin_libraries = 'pgoutput, test_decoding, my_trusted_decoder'
此外,从版本 17 或更高版本迁移时,如果 pg_upgrade --check 发现新集簇的 output_plugin_libraries 参数不允许旧集簇逻辑复制槽 所使用的插件,检查将会失败。 请在执行 pg_upgrade 前对新集簇的设置作必要补充。
PostgreSQL 项目感谢 Vladimir Tokarev 和 Yu Kunpeng 报告此问题。 (CVE-2026-6471)
修复 contrib/pgcrypto 的 PGP 加密,使其能够检测 不受支持的密码算法(Daniel Gustafsson) § §
此前,如果 OpenSSL 拒绝所请求的密码算法(例如,因为它正以 FIPS 模式运行, 或尚未加载 legacy provider),pgcrypto 无法发现这一失败,只会将未经加密的块与明文进行异或,使这种 “加密” 轻易即可破解。这通常发生在已弃用或不符合 FIPS 的 密码算法上(cipher-algo=blowfish/bf、twofish、cast5 或 3des)。
默认情况下,pgcrypto 现在将无法解密以这种方式 受影响的任何消息。为了能够取回这类数据,现新增选项 ignore-cipher-failure,用于 pgp_pub_decrypt() 和 pgp_sym_decrypt()。 设置 ignore-cipher-failure=1 将恢复此前的行为, 从而可以移除有缺陷的加密封装:
pgp_sym_decrypt(encrypted_column, any key, 'ignore-cipher-failure=1')
识别出受影响的消息并移除其封装后,即可使用现代算法重新加密。不过, OpenSSL 的行为必须与创建这些有缺陷消息时相同:如果不受支持的算法集合 并不相同,这种方法将无法奏效。请参阅 ignore-cipher-failure 的文档。
PostgreSQL 项目感谢 Shishir Sharma 报告此问题。 (CVE-2026-14663)
修复 psql:跳过脚本中的 COPY ... FROM STDIN 命令后面的内联数据,即使 COPY 在发送 PGRES_COPY_IN 前失败 (Tom Lane) § §
此前,如果 COPY 命令在开始执行时失败(例如目标表不存在), psql 无法意识到这一点,会继续把随后的内联数据 当作 SQL 命令读取。即使在最好的情况下这也是错误的,在最坏的情况下则会 构成 SQL 注入风险。现在,psql 会识别语法有效的 COPY ... FROM STDIN 命令,并在服务器没有返回 PGRES_COPY_IN 时自行跳过数据。
此修复不太可能影响生产 SQL 脚本,但测试脚本可能会有意测试失败的 COPY ... FROM STDIN 命令。此类脚本需要在每条 这样的命令后增加一行 \. 数据终止符。
PostgreSQL 项目感谢 Alexander Lakhin 报告此问题。 (CVE-2026-6464)
交叉检查运行 EXECUTE 或 FETCH 的 portal 的输出行类型(Robert Haas) §
EXECUTE 和 FETCH 使用两个 portal: 外层 portal 用于语句本身,内层 portal 则代其运行实际查询。 此前可以使两个 portal 声明的行类型不一致,从而导致服务器内存泄露和 任意代码执行。
PostgreSQL 项目感谢 Ben Morris(与 Claude 和 Anthropic Research 协作)和 Peter Geoghegan 报告此问题。 (CVE-2026-16239)
修复 to_char() 处理过长时区缩写时发生的 缓冲区越界写入(Tom Lane) §
这很容易导致服务器崩溃,并且已有报告表明可利用该问题执行任意代码。
PostgreSQL 项目感谢 Hcamael、Amjad Shahzad、AntAISecurityLab 的 Tan Zhen、Tomer Fichman、 Zheng Yu、Amy Burnett(OpenAI Codex Security)、Rick de Jager、Heewon Song、Sylvie Mayer、Aleksander Alekseev 和 Hillai Ben Sasson 报告此问题。 (CVE-2026-14669)
修复正则表达式匹配/拆分函数中的缓冲区越界写入(Masahiko Sawada) §
如果传入编码无效的数据,这些函数可能会在转换缓冲区末尾之外写入数据。
PostgreSQL 项目感谢 Francesco Verardi 报告此问题。 (CVE-2026-14664)
增强 ascii() 函数对无效输入的防护 (Michael Paquier) §
通过提供编码无效的输入,可以诱使此函数越界读取并返回几个不应访问的 数据字节。在启用断言的构建中,还可能触发其断言。
PostgreSQL 项目感谢 Hcamael 报告此问题。 (CVE-2026-18024)
修复 pg_restore_attribute_stats() 对多范围类型的处理 (OpenAI Security Research Team)
pg_restore_attribute_stats() 将多范围类型当作其底层 范围类型处理。对于边界直方图,这是正确的,但对于其他所有统计信息类型 都是错误的。
PostgreSQL 项目感谢 Amy Burnett(OpenAI Codex Security)报告此问题。 (CVE-2026-16238)
让 scalarineqsel() 检查预期为 tid 类型的常量是否确实属于该类型(Tom Lane) §
对于所有使用此估算器的内置操作符,这一预期都会成立,但恶意构造的操作符 可能违反该预期,从而导致崩溃或服务器内存泄露。
PostgreSQL 项目感谢 Hcamael 报告此问题。 (CVE-2026-14668)
增强 tsvector 和 tsquery 代码对超长值的防护 (包括单个词位以及向量/查询的总长度)(Tom Lane) § §
文档所述限制并未在所有代码路径上强制执行。
PostgreSQL 项目感谢 Yuhang Wu、Zhenpeng Lin、Zheng Yu 和 Hcamael 报告这些问题。 (CVE-2026-14662)
修复多处错误地假定无需处理超过 FUNC_MAX_ARGS 个 函数参数的问题(Tom Lane) § §
特别是,服务器对聚合函数参数数量的实际限制是 FUNC_MAX_ARGS - 1,但解析器未强制执行这一限制, 给后续处理带来隐患。
PostgreSQL 项目感谢 Zheng Yu、ylwangtju 和 Masahiko Sawada 报告这些问题。 (CVE-2026-14679)
拒绝从 SQL 调用接受或返回 internal 类型的函数 (Tom Lane) § §
现有防护已被证明不足,因此添加更明确的检查。
PostgreSQL 项目感谢 Amy Burnett(OpenAI Codex Security)报告此问题。 (CVE-2026-14680)
在 ALTER TABLE 重建扩展统计信息对象时保留其所有权 (Masahiko Sawada) §
此前,执行 ALTER TABLE 的角色会取得这类对象的所有权, 这并不合适。
PostgreSQL 项目感谢 Noah Misch 报告此问题。 (CVE-2026-6469)
逆解析 EXTRACT() 函数调用时,按需为字段名加引号 (Nathan Bossart) §
解析器接受 EXTRACT() 中的任意字符串字面量作为字段名, 并将验证推迟到执行阶段。如果该调用被存储后再逆解析(例如在 pg_dump 期间),字符串正文会被原样输出, 从而造成 SQL 注入。
PostgreSQL 项目感谢 Ben Morris(与 Claude 和 Anthropic Research 协作)报告此问题。 (CVE-2026-15741)
在此前漏检的场景中检查数据类型的 USAGE 权限 (Nathan Bossart) § § §
CREATE TYPE AS RANGE、ALTER TABLE OF 以及创建存储表达式的命令此前都没有执行这一检查。这些遗漏使没有 USAGE 权限的角色仍能创建依赖该类型的对象,并可能阻止 类型所有者日后更改该类型。
PostgreSQL 项目感谢 Jingzhou Fu 报告此问题。 (CVE-2026-6470)
角色发生变更后使依赖角色的缓存计划失效 (Ilya Staroverov、Shinya Kato、Nathan Bossart) §
角色成员关系、角色属性和数据库所有权的变更可能影响行级安全策略的预期行为, 但此前系统仍会继续使用按旧状态生成的缓存计划。
PostgreSQL 项目感谢 Ilya Staroverov 和 Shinya Kato 报告此问题。 (CVE-2026-14666)
在直接 SSL 连接之后拒绝 GSSEncRequest(Michael Paquier)
建立 TLS 加密连接后,服务器仍会接受 GSSAPI 加密请求。如果请求成功, 连接仍会使用 TLS 加密,但在 pg_hba 规则看来却像 GSS 连接。因此,意图禁止 TLS 的 pg_hba 策略无法 得到正确执行。
PostgreSQL 项目感谢 p4p3r 报告此问题。 (CVE-2026-14681)
让模拟的 SCRAM secret 更可信(Nathan Bossart) §
如果尝试以 SCRAM 登录不存在或没有 SCRAM secret 的角色,系统会生成一个 模拟 secret 并照常执行认证握手,以免向攻击者泄露这些事实。但模拟 secret 使用固定的迭代次数,这本身可能形成可观察的响应差异。现改用配置设置 scram_iterations,使模拟 secret 更接近该安装中的真实 secret。
PostgreSQL 项目感谢 Radim Marek 报告此问题。 (CVE-2026-14672)
修复 ecpg 应用程序因接收服务器返回的无效 bytea 数据而发生的越界写入 (Michael Paquier) §
ecpg 未经检查便假定任何 bytea 值 都必须以 \x 开头。有缺陷或恶意的服务器可能发送短于 2 字节的 字符串,从而破坏应用程序内存。
PostgreSQL 项目感谢 ylwangtju 报告此问题。 (CVE-2026-16241)
不要对 psql 的 \unrestrict 命令参数执行反引号扩展(Nathan Bossart) §
CVE-2025-8714 修复中的这一疏漏,使恶意服务器能够把 shell 命令注入 纯文本转储输出,并在恢复时于运行 psql 的机器上 执行;这正是 CVE-2025-8714 意图防止的场景。
PostgreSQL 项目感谢 Lucas Velgus、Filip Janus 和 Daniel Bakker 报告此问题。 (CVE-2026-18408)
移除 pg_dump 关于 pg_proc.protrftypes 不可能包含超过 FUNC_MAX_ARGS 个条目的假设 (Tom Lane) §
由于该数组可能同时包含输入和输出参数的条目,其长度完全可能超过 FUNC_MAX_ARGS(该值只限制输入参数)。即使并非如此, pg_dump 也不能假定服务器构建时使用的 FUNC_MAX_ARGS 值与自身相同。越界写入会导致 pg_dump 内部的内存被破坏。
PostgreSQL 项目感谢 Masahiko Sawada 报告此问题。 (CVE-2026-19385)
增强 PL/Perl 对 “tied” Perl 数组和哈希的防护(Tom Lane) §
行为不符合常规的 tied 对象可能导致内存覆盖,或构造出损坏的结果数组 (这很可能在之后引发问题)。
PostgreSQL 项目感谢 Hcamael 报告此问题。 (CVE-2026-14670)
修复 PL/Perl 和 PL/Tcl 内存分配计算中的整数溢出(Heikki Linnakangas) §
该问题与 CVE-2026-6473 属于同一类型,只是出现在代码的不同部分, 并采用相同方式修复。
PostgreSQL 项目感谢 Tulya Project(Team Dhiutsa、Bitecope Technologies Private Ltd) 报告此问题。 (CVE-2026-14677)
确保 contrib/amcheck 函数在执行索引表达式前限制 search_path(Noah Misch) §
由于 amcheck 会以相关表所有者的身份运行这些索引表达式,调用者可能劫持 依赖 search_path 的函数,以表所有者身份运行任意代码。 默认情况下这并非漏洞,因为只有超级用户可以调用 amcheck 函数;但如果将 该权限授予其他用户,造成的风险会比文档所述更大。
PostgreSQL 项目感谢 Yuelin Wang 和 Jacob Brazeal 报告此问题。 (CVE-2026-14673)
修复 contrib/fuzzystrmatch 的 levenshtein() 和 levenshtein_less_equal() 函数中的整数溢出 (Nathan Bossart) §
向这些函数传入很大的代价值可能引发整数溢出,从而产生无意义的结果, 甚至在某些情况下导致越界写入。
PostgreSQL 项目感谢 Ben Morris(与 Claude 和 Anthropic Research 协作)报告此问题。 (CVE-2026-15742)
修复 contrib/pg_stat_statements 中的缓冲区越界写入 (Álvaro Herrera)
查询规范化过程未准确计算规范化字符串所需的空间。
PostgreSQL 项目感谢 Sajeeb Lohani(与 TrendAI Zero Day Initiative 合作)和 Yuelin Wang 报告此问题。 (CVE-2026-14676)
修复 contrib/pg_trgm 的 GiST picksplit 函数中的 数据类型错误(Heikki Linnakangas) §
此错误会导致缓冲区越界读取,通常造成不佳的页面分裂决策;在极少数情况下 也可能导致崩溃。
PostgreSQL 项目感谢 Mehmet D. Ince 报告此问题。 (CVE-2026-14678)
移除 contrib/refint 中的计划缓存 (Ayush Tiwari) §
这种缓存行为存在几个严重缺陷,尤其是 check_foreign_key() 会把新键值嵌入其级联 UPDATE 查询, 因此缓存计划会重复使用最初所需的值,而不是当前应使用的键值。 最简单的解决办法是移除该缓存。
PostgreSQL 项目感谢 Hcamael 报告此问题。 (CVE-2026-14671)
修复重放由较旧小版本生成的 WAL 时发生的自死锁 (Andrey Borodin) §
该错误由上一批小版本发布引入。在某些场景中,它会使跟随较旧小版本主库的 备库卡住。
修复重新扫描异步 Append 计划节点时异步读取处理不当的问题 (Alexander Korotkov、Gleb Kashkin、Etsuro Fujita) §
当上层计划节点尚未读取完整的 Append 输出就重新扫描 Append 时, 需要丢弃所有已发送到外部服务器且尚未完成的请求(例如由 postgres_fdw 发送的请求)。此前,当子计划的 参数发生变化,或者在下一次扫描中被分区剪枝丢弃时,这项操作未能 正确完成。这可能导致错误的查询结果、无限循环或断言失败。
修复 RANGE 分区表的分区剪枝错误(David Rowley) §
在某些情况下,本不应跳过的 DEFAULT 分区会被跳过,这可能导致 查询结果中缺少行。
修复规划器对 表达式所做的可空性和 严格性检查(Ayush Tiwari) §value IN (array)
只有在已知数组操作数非空时,这些检查才应成功,但此前遗漏了这项 考虑,因而可能应用本不该采用的优化。如果数组实际为空,这可能导致 查询结果错误。
修复错误的连接移除逻辑(Matheus Alcantara、Richard Guo) § §
在边缘情况下,来自外连接可空侧内部的常量输出值可能在应替换为 NULL 时未被替换。
补上对容器数据类型(数组、复合类型、范围类型)进行等值比较时遗漏的 可哈希性检查(Andrei Lepikhov、Tom Lane) §
规划器在决定可以使用基于哈希的计划类型之前,必须验证容器组成类型的 可哈希性。此前有些地方遗漏了这一步,导致执行时出现 “could not identify a hash function” 错误。
修复 COUNT 窗口函数的错误优化:这些函数带有 EXCLUDE 子句或缺少 ORDER BY (Chengpeng Yan、David Rowley) §
这些窗口函数在不应被视为单调函数的情况下被当成单调函数处理, 因而可能计算出错误答案。
修复 ALTER COLUMN ... DROP EXPRESSION 在存在多级 分区时无法正常工作的问题(Alberto Piai) §
禁止将规则重命名为 _RETURN(Tom Lane) §
该名称保留给视图的 ON SELECT 规则,但 ALTER RULE 允许将其他规则重命名为 _RETURN,从而引发后续问题。
修复 DROP OWNED BY 中角色成员资格授权未释放锁的问题 (Jeff Davis) §
这一疏漏会产生警告消息,随后成员资格授权上的锁会一直保留到事务结束。
修复 EXPLAIN 在逆解析 SQL/JSON 聚合时 失败的问题(Richard Guo) §
某些计划结构会导致 “invalid JsonConstructorExpr underlying node type” 错误。
修复 REINDEX CONCURRENTLY 与可延迟唯一约束一起 使用时的问题(Nitin Motiani) §
在 REINDEX CONCURRENTLY 期间创建的临时索引副本被 错误地标记为强制立即满足唯一性,导致虚假的约束违例报告。
修复 to_date() 对本地化月份名和星期名的匹配 (Heikki Linnakangas) §
当大小写折叠改变字符串的字节长度时,匹配逻辑会出现错误行为。
修复 Hangul U+11A7 (TBASE) 的 NFC 重组错误 (Diego Frias、Michael Paquier) §
该字符被当作有效的 T 音节,但实际上并非如此,因此在规范化过程中被 悄然吞掉。
避免不区分大小写的 synonym 词典可能截断输出词位 (Jeff Davis) §
如果折叠为小写增加了词位的字节长度,输出时会错误地将其截断为原来的 字节长度。
修复 hash_record_extended() 中的拼写错误 (Man Zeng) §
代码未初始化传给 FunctionCallInvoke() 的第二个 isnull 参数。对于 现有的核心内置扩展哈希支持函数,这不会造成影响,因为它们不会检查 该值。不过,如果扩展提供的哈希函数检查 PG_ARGISNULL(1),就可能受到影响。
修复 pg_get_publication_tables() 在可发布表被并发删除时 失败的问题(Bharath Rupireddy) §
防止 satisfies_hash_partition() 在使用 VARIADIC NULL 时崩溃(Robert Haas) §
使 tsvector_filter() 及相关函数以更清晰且一致的 方式报告无效权重错误(Ewan Young) §
特别是,以八进制形式 (\)报告不可打印的 ASCII 权重字符,就像 nnncharout() 对它们的呈现方式 一样。这可以避免生成编码无效的错误消息。
修复 xpath() 对命名空间节点处理不当的问题 (Michael Paquier) § §
此修复避免了意外的 “could not copy node” 错误。
即使未提供任何变量,也将未定义的 jsonpath 变量作为错误处理 (Andrey Rachitskiy) §
jsonb 的 @? 和 @@ 操作符无法提供任何变量供其 jsonpath 表达式使用。 此代码路径错误地将未知的 jsonpath 变量视为 JSON null,而没有按预期 抛出错误。除了行为不符合预期之外,此错误还可能导致无上限的内存消耗。
修复 IS JSON 或类似构造的参数属于字符串类别但缺少到 text 类型的类型转换时发生的空指针崩溃(Ayush Tiwari) §
PostgreSQL 核心中没有这种数据类型, 但某些扩展类型可以触发该问题。
避免将最小的 money 值除以 -1 时出现依赖机器的行为 (Andrey Rachitskiy) §
修复为文本搜索词典创建缓存条目的过程中发生内存不足后导致的崩溃 (Tom Lane) §
修复处理格式错误的 ispell/hunspell 词典文件时的内存安全缺陷 (Andrey Rachitskiy) §
禁止访问其他会话的临时表(Jim Jones、Daniil Davydov、 Alexander Korotkov) §
某些代码路径未能阻止这种访问,导致在没有报错的情况下得到错误 (不一致)的结果。
在清理 GIN 索引 posting-tree 期间响应查询取消并遵守清理延迟 (Paul Kim、Alexander Korotkov) §
常见值的 posting tree 可能很大,因此遗漏这项检查可能导致清理运行 很长时间后才注意到中断。
修复 GiST 和 SP-GiST 仅索引扫描期间可能错误解码索引元组的问题 (Peter Geoghegan) §
此错误可能导致仅索引扫描计划输出损坏的数据。唯一受影响的核心操作符类 是 GiST 的 range_ops,并且只有当范围列不是第一个索引列时才可能出错。
确保批量扩展的表中新出现的最后一个块被及时加入其空闲空间映射 (Jingtang Zhang) §
一个差一错误导致多块表扩展的最后一个块未在映射中标记为空闲。 清理最终会纠正此问题,但在此之前这部分空间无法使用。
创建目录时,容忍同一目录被并发创建(Andrew Dunstan、Tom Lane) §
通过在任何被依赖对象上取得共享锁,防止创建悬空的对象依赖关系 (Bertrand Drouvot) § §
该共享锁会与任何删除被依赖对象的尝试冲突,从而消除之前存在的竞态条件。 例如,如果一个会话删除一个在其看来为空的模式,同时另一个会话在该模式 中创建函数,此前两个事务都可能提交,并留下无效的函数定义。现在,其中 一个事务会失败。
修复 SERIALIZABLE 隔离模式中冲突检测的竞态条件 (Peter Geoghegan) §
检查最初为空的 B-树 索引时可能漏掉冲突,因错误地允许冲突事务提交而 破坏可串行性。
修复 ProcSignalBarrier 代码中的竞态条件(Masahiko Sawada) §
此错误可能导致进程卡住,通常发生在报告 “still waiting for backend with PID nnnn to accept ProcSignalBarrier” 之后。
修复属于同一锁组的一组进程同时退出时的竞态条件(Vlad Lesin) § §
这些错误可能导致 PANIC 中止,并出现 “latch already owned” 等消息。普通并行查询通常不会出现 此问题,因为领导者在看到其工作进程结束之前不会退出;但某些扩展会 触发此问题。
修复备库提升期间逻辑解码选择时间线时的竞态条件(Bertrand Drouvot) § § §
在备库上执行的逻辑解码可能会失败,并出现 “requested WAL segment has already been removed” 错误。 重试即可成功,因此没有永久性问题,但存在可用性隐患。
避免在时间线跳转期间暴露 WAL 接收进程的完整连接字符串(Chao Li) §
pg_stat_wal_receiver 视图应显示不含敏感数据的 脱敏连接字符串。但复用现有 WAL 接收进程时,它会短暂显示完整字符串。
使用运行时检查而不只是 Asserts,验证逻辑复制期间接收的元组具有正确的 列数(Varik Matevosyan) §
恶意或有缺陷的发布者可能发送列数不一致的数据。虽然尚未找到会因此 产生严重不良后果的场景,但额外谨慎似乎是必要的。
改进构造的复制命令中字符串参数的引用处理(Tom Lane) §
多处生成复制命令的代码在引用复制槽名称及其他需要插入命令的参数时不够 谨慎。这可能导致命令出现意外的语法错误。原则上,精心构造的复制槽名称 可能导致 SQL 注入;但这种场景在实践中似乎极不可能发生,因为只有高权限 用户才能调用复制操作,而且他们没有理由使用来自不可信来源的槽名称。
修复对空预备事务的逻辑解码(Masahiko Sawada) §
未产生任何可解码更新的预备事务可能导致向输出插件发送 COMMIT/ROLLBACK PREPARED,而之前没有发送 PREPARE。对于内置订阅者,这会破坏复制,其他插件 很可能也无法正确处理。
修复备库提升后不记录 WAL 的序列损坏的问题(Fujii Masao) §
此前,如果在主库上创建了不记录 WAL 的序列并将其复制到备库,那么提升备库后 访问该序列可能会失败,并出现 “bad magic number in sequence” 或相关错误。
修复回退到归档后级联备库无法重新连接的问题(Marco Nenciarini) §
回退到归档恢复后,级联备库可能因 “requested starting point ... is ahead of the WAL flush position” 而无法重新连接到其上游备库。
避免删除临时复制槽时的竞态条件(Zhijie Hou) §
释放槽的代码在释放复制槽后,还会对该槽的共享内存条目执行一些额外更新。 这并不安全,因为另一个会话可能立即复用已删除槽的共享内存条目。对于 临时槽,现跳过这些更新。
修复逻辑复制表同步期间陈旧的进度报告(Shinya Kato) §
此前,即使数据复制已经完成,订阅者中的 pg_stat_progress_copy 视图仍会把最初的 COPY 操作显示为活动状态。在同步追上发布者之前, 该陈旧条目会一直可见。
此前,失败后 pg_stat_progress_basebackup 视图会继续显示过时的进度条目,直到复制客户端断开连接。 pg_basebackup 通常会立即断开连接, 但其他客户端可能不会。
修复启用 track_functions 时并发删除 pgstats 条目 可能导致的 PANIC(Sami Imseih、Michael Paquier) § § §
未能为对应的共享哈希表条目获取空间后,清理已损坏的本地 pgstats 条目 (Niall Newman) §
如果不进行清理,下次使用该本地条目时会导致空指针解引用。
在 PL/Perl 中,避免处理无效的 PostgreSQL::InServer::ARRAY 对象时因解引用 NULL 指针而 崩溃(Xing Guo) §
在 PL/Python 中,正确检查处理序列和映射对象 时发生的错误(Richard Guo) §
此前,损坏的对象或未处理的异常可能导致解引用 NULL 指针而崩溃。
在 libpq 中,执行 pqReadData() 时始终排空 SSL 或 GSS 解密缓冲区中 所有待处理的字节(Jacob Champion) § § § §
这可以避免一种边界情况:libpq 或调用它的 应用程序等待套接字上有更多数据到达,而实际上所有数据都已经到达。
允许 libpq 接受超过 30000 字节的 ParameterDescription 消息(Ning Sun) §
此前,libpq 的有效性启发规则并未把这种消息 类型视为可能很长。此限制会导致参数超过 7498 个的预备查询失败;这种 情况虽然不太可能出现,但系统确实支持。
拒绝 ecpg 的 GET/SET DESCRIPTOR 语句中存在多个描述符首部项(Masashi Kamura) §
此前语法允许这种形式,但会生成有缺陷的 C 代码。现调整语法和文档, 只允许一个首部项。
使 psql 扩展对齐输出格式中的行宽保持一致 (Pavel Stehule) §
当表的数据行比记录标题行窄时,将数据行加宽到与标题行一致,从而避免 输出不美观。
修复 psql 在 \l+ 中 显示数据库大小时的权限检查(Christoph Berg) §
底层服务器函数允许具有 pg_read_all_stats 权限的用户 查看所有数据库的大小,即使他们没有 CONNECT 权限。 但 psql 不知道这一规定,除非用户具有 CONNECT 权限,否则不会调用该函数。
修复 psql 对 \df 的 制表符补全,使其也涵盖过程(Erik Wienhold) §
修复 pgbench 中的线程安全性缺陷 (Fujii Masao) §
当 pgbench 使用多个线程和 --verbose-errors 选项运行时,不同线程可能尝试使用 同一个缓冲区构造错误消息,导致日志输出损坏。
对 pg_recvlogical 输出文件采用源集簇的 文件组读权限(Fujii Masao) §
文档声称 pg_recvlogical 会这样做,但它从未 实际启用组读权限。
在 contrib/amcheck 中,正确处理短头部 varlena Datum(Andrey Borodin) §
此错误可能导致验证 B-树 索引时执行多余工作,但似乎没有造成更严重的 后果。
在 contrib/btree_gist 中,修复 NaN 在 float4 和 float8 操作符类中的处理(Bill Kim、Tom Lane) §
比较以及 GiST penalty 和 distance 函数都没有考虑 NaN,因而在遇到该值时会给出错误结果。建议在安装此 更新后对 float 列上的 btree_gist 索引重建索引, 前提是这些列中可能存在 NaN 条目。
在 contrib/btree_gist 中,修复使用不等操作符的 搜索(Ayush Tiwari) §
对于变长数据类型,扫描非叶索引页的代码使用了错误的比较函数,导致结果 错误并可能引发崩溃。
修复以下模块中缺少防护的递归和循环: contrib/hstore_plperl、 contrib/jsonb_plperl 和 contrib/jsonb_plpython (Aleksander Alekseev) § §
防止处理深度嵌套的 jsonb 值时发生栈溢出,并允许中断尝试 解引用 Perl 对象引用的环状链时造成的无限循环。
修复 contrib/intarray 中遗漏释放统计信息 catcache 条目的问题(Man Zeng) §
此疏漏会导致 “resource was not closed: cache pg_statistic” 之类的警告。
在 contrib/ltree 中,修复比较时的整数溢出 (Ayush Tiwari) §
包含超过约 14,653 个标签的 ltree 值会因溢出而得到错误的 比较结果。如果 B-树 索引包含这类值,它很可能已经损坏,应在安装此 更新后重建索引。
修复 contrib/pg_surgery 的 heap_force_kill 和 heap_force_freeze 函数中的数组越界写入 (Michael Paquier) §
尝试更改偏移号等于 MaxHeapTuplesPerPage 的 TID 时,会在已分配数组的 末尾之外写入一个字节,可能导致服务器崩溃。
在 contrib/pg_surgery 中,避免包含超过 64K 个元素 的 TID 数组导致无限循环(Andrey Rachitskiy) §
避免 contrib/refint 的 check_foreign_key() 中解引用 NULL 指针 (Ayush Tiwari) §
在更新时级联的情况下,被引用列的 null 值会导致崩溃。这是 CVE-2026-6637 修复中的一项疏漏,但修复之前的代码也并不真正正确。
修复 contrib/seg,使其正确打印带有 ~ 确定性指示符的线段(Ewan Young) §
由于拼写错误,seg_out() 不会打印附加在线段上界的 ~ 确定性指示符。更糟的是,如果下界带有 ~ 而上界没有指示符,上界会完全不被打印,从而错误地 将该值转换为开区间。
修复 contrib/xml2 的 xpath_nodeset() 函数处理命名空间节点时的崩溃 (Andrey Chernyy、Michael Paquier) §
支持使用 Visual Studio 2026 构建 PostgreSQL(Andrew Dunstan) §
支持使用 OpenSSL 4 构建 PostgreSQL (Daniel Gustafsson) §
将时区数据文件更新到 tzdata 2026c 发布版本 (Tom Lane) §
Alberta(America/Edmonton)将从 2026 年 11 月开始全年采用 UTC-06 (实际上就是永久 DST)。本次发布假定其 TZ 缩写从那时起为 CST。这看起来可能会改变,但尚不清楚会使用什么新缩写。
Morocco(Africa/Casablanca)将从 2026-09-20 起改为永久 UTC+00, 不再进行夏令时转换。