E.1. 发布版本 15.19 #
发布日期:. 2026-08-13
本次发布包含来自 15.18 的多项修复。有关 15 主版本新特性的说明,请参见第 E.20 节。
E.1.1. 迁移到版本 15.19 #
对于运行 15.X 的用户,不需要执行导出/恢复。
但是,下面前三个安全条目描述了更新后可能需要进行的配置调整和数据清理。
此外,如果使用 contrib/btree_gist
或 contrib/ltree,可能需要为这些扩展创建的索引重建索引;请参见下面的相关条目。
此外,如果是从早于 15.14 的版本升级,请参见第 E.6 节。
E.1.2. 变更 #
将逻辑解码输出插件限制为新服务器参数
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 数组和 hash 的防护(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)§valueIN (array)只有在已知数组操作数非空时,这些检查才应成功,但此前遗漏了这项考虑,因而可能应用本不该采用的优化。如果数组实际为空,这可能导致查询结果错误。
补上对容器数据类型(数组、复合类型、范围类型)的等值比较是否支持 hash 运算的检查(Andrei Lepikhov、Tom Lane)§
规划器在决定可以使用基于 hash 的计划类型之前,必须验证容器组成类型是否可进行 hash 运算。此前有些地方遗漏了这一步,导致执行时出现“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,从而引发后续问题。修复
REINDEX CONCURRENTLY与可延迟唯一约束一起使用时的问题(Nitin Motiani)§在
REINDEX CONCURRENTLY期间创建的临时索引副本被错误地标记为强制立即满足唯一性,导致虚假的约束违例报告。修复
to_date()对本地化月份名和星期名的匹配(Heikki Linnakangas)§当大小写折叠改变字符串的字节长度时,匹配逻辑会出现错误行为。
修复谚文 U+11A7 (TBASE) 的 NFC 重组错误(Diego Frias、Michael Paquier)§
该字符被当作有效的 T 音节,但实际上并非如此,因此在规范化过程中被悄然吞掉。
避免不区分大小写的
synonym词典可能截断输出词位(Jeff Davis)§如果折叠为小写增加了词位的字节长度,输出时会错误地将其截断为原来的字节长度。
修复
hash_record_extended()中的拼写错误(Man Zeng)§代码未初始化传给 FunctionCallInvoke() 的第二个 isnull 参数。对于现有的核心内置扩展 hash 支持函数,这不会造成影响,因为它们不会检查该值。不过,如果扩展提供的 hash 函数检查
PG_ARGISNULL(1),就可能受到影响。防止
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,而没有按预期抛出错误。除了行为不符合预期之外,此错误还可能导致无上限的内存消耗。避免将最小的
money值除以 -1 时出现依赖机器的行为(Andrey Rachitskiy)§修复为文本检索词典创建缓存条目的过程中发生内存不足后导致的崩溃(Tom Lane)§
修复处理格式错误的 ispell/hunspell 词典文件时的内存安全缺陷(Andrey Rachitskiy)§
在清理 GIN 索引倒排树期间响应查询取消并遵守清理延迟(Paul Kim、Alexander Korotkov)§
常见值的倒排树可能很大,因此遗漏这项检查可能导致清理运行很长时间后才注意到中断。
修复 GiST 和 SP-GiST 仅索引扫描期间可能错误解码索引元组的问题(Peter Geoghegan)§
此错误可能导致仅索引扫描计划输出损坏的数据。唯一受影响的核心操作符类是 GiST 的 range_ops,并且只有当范围列不是第一个索引列时才可能出错。
创建目录时,容忍同一目录被并发创建(Andrew Dunstan、Tom Lane)§
通过在任何被依赖对象上取得共享锁,防止创建悬空的对象依赖关系(Bertrand Drouvot)§ §
该共享锁会与任何删除被依赖对象的尝试冲突,从而消除之前存在的竞态条件。例如,如果一个会话删除一个在其看来为空的模式,同时另一个会话在该模式中创建函数,此前两个事务都可能提交,并留下无效的函数定义。现在,其中一个事务会失败。
修复
SERIALIZABLE隔离模式中冲突检测的竞态条件(Peter Geoghegan)§检查最初为空的 B-树索引时可能漏掉冲突,因错误地允许冲突事务提交而破坏可串行性。
修复 ProcSignalBarrier 代码中的竞态条件(Masahiko Sawada)§
此错误可能导致进程卡住,通常发生在报告“still waiting for backend with PID
nnnnto accept ProcSignalBarrier”之后。修复属于同一锁组的一组进程同时退出时的竞态条件(Vlad Lesin)§ §
这些错误可能导致 PANIC 中止,并出现“latch already owned”等消息。普通并行查询通常不会出现此问题,因为领导者在看到其工作进程结束之前不会退出;但某些扩展会触发此问题。
避免在时间线跳转期间暴露 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)§ § §未能为对应的共享 hash 表条目获取空间后,清理已损坏的本地 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的 TAB 补全,使其也涵盖过程(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,不再进行夏令时转换。
报告文档问题
阅读 上游文档. 通过 PostgreSQL 文档反馈表单.