pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
发布日期: 2026-11-12
此版本包含针对 16.15 的多项修复。关于大版本 16 中的新特性,请参见第 E.17 节。
运行 16.X 的用户无需转储/恢复。
不过,已发现多个可能导致索引损坏的错误。请检查下面变更日志中提到 REINDEX 的条目,并重建任何可能受到影响的索引。
另外,如果你是从早于 16.15 的版本升级,请参见第 E.2 节。
针对并发修改复合类型并操作该类型数据所引发的问题增加防护(Heikki Linnakangas,Andres Freund,Nathan Bossart,Nikhil Sontakke)§§§§§§§§§§§§§§§§§§§§§§§§§§§§
ALTER TABLE ... ALTER COLUMN TYPE 等操作存在风险,因为系统中可能仍有采用旧行布局的元组。虽然我们早已加入一些检查来防范此类情况,但这些检查从未完全覆盖所有情况,而且完全无法检测在查询使用复合类型的同时修改该类型的情况。这一大批补丁旨在改善这些问题。
引入版本控制逻辑,以便检测复合 datum 与用于解释它们的元组描述符不匹配的情况。要获得完整保护,此项更改要求重新构建 C 语言扩展,有些扩展还需要修改源代码。必要时,可以使用新增的服务器参数 composite_type_mismatch 禁用这些检查,但这样做存在安全风险。
增加锁定,防止对尚未提交的 CREATE TABLE 所使用的复合类型执行 ALTER TYPE 等操作。
收紧复合类型存在依赖项时是否允许 ALTER COLUMN TYPE 的规则。例如,当函数的默认表达式或新式 SQL 函数体依赖该类型时,不再允许此操作。
PostgreSQL 项目感谢 Andrew Gierth, Alexander Lakhin, Francesco Verardi, Hcamael, Tomer Fichman, OpenAI Security Research Team, Peter Geoghegan, Mehmet Ince, Bryan Green, Sumedh Pathak, Sergey Shinderuk, Yuxiao Guo, Nikhil Sontakke, Daniel Bakker, the Anthropic OSS program, Claude and Ada Logics 报告此问题。(CVE-2026-6460)
在 ExecEvalFieldStore[De]Form() 中处理并发的行类型变更(Tomas Vondra,Heikki Linnakangas)§
PostgreSQL 项目感谢 OpenAI Codex Security, Bronson Yen, Mehmet Ince, Claude and Ada Logics 报告此问题。(CVE-2026-116306)
在 INSERT ... ON CONFLICT 中强制检查视图行的可见性(Peter Geoghegan,Zsolt Parragi)§
对视图执行 INSERT ... ON CONFLICT DO UPDATE 时,可能更新本应被视图的 WHERE 子句隐藏的行。虽然文档说明了这一行为,但它显然出乎意料,而且会引发安全问题:用户可以更新其本不应有权访问的行。更新不正确,而插入也不可能(会因用于判定冲突的唯一索引而失败),因此现在遇到这种情况时改为报错。INSERT ... ON CONFLICT DO SELECT 此前也可能显示此类行,现在不再如此。
PostgreSQL 项目感谢 Qing Xu, Carl Andersen, Zsolt Parragi, the Anthropic OSS program, Shihao Zhong, and Josef Šimánek 报告此问题。(CVE-2026-16237)
使 REASSIGN OWNED 对调用者权限的检查与 ALTER ... OWNER TO 一致(Zsolt Parragi)§
从 v16 起,将对象交给另一个角色要求能够 SET ROLE 到该角色。然而,被授予 INHERIT TRUE, SET FALSE 的角色可以通过 REASSIGN OWNED 绕过此要求。被授予 INHERIT FALSE, SET TRUE 的角色则遇到相反的问题:REASSIGN OWNED 失败,而 ALTER OWNER 成功。现在让 REASSIGN 遵循 ALTER OWNER 的规则。
REASSIGN OWNED 还绕过了 ALTER DATABASE OWNER 中的 CREATEDB 权限检查。
在 v15 和 v14 中,REASSIGN OWNED 的权限检查比 ALTER OWNER 中的成员资格检查更严格。这一点保持不变,但仍修复缺失的 CREATEDB 检查。
PostgreSQL 项目感谢 Zsolt Parragi 报告此问题。(CVE-2026-120146)
禁止关闭仍在初始化的 portal(Michael Paquier)§
此项更改可防止多种释放后使用内存的问题。
PostgreSQL 项目感谢 Tomas Vondra 报告此问题。(CVE-2026-116332)
在触发器函数结束时强制关闭与过渡表关联的 portal(Jeff Davis)§
此项更改可避免释放后使用内存的风险。
PostgreSQL 项目感谢 Peter Geoghegan 报告此问题。(CVE-2026-120143)
修复共享元组描述符管理中导致释放后使用内存的竞态条件(Robert Haas)§
PostgreSQL 项目感谢 Peter Geoghegan 报告此问题。(CVE-2026-116304)
修复 pg_show_all_settings() 中释放后使用内存的问题(Masahiko Sawada)§
PostgreSQL 项目感谢 Claude and Ada Logics 报告此问题。(CVE-2026-120152)
修复展开记录的域约束检查中释放后使用内存的问题(Tom Lane)§
PostgreSQL 项目感谢 Claude and Ada Logics 报告此问题。(CVE-2026-120150)
防止在“generation”内存上下文中释放大块内存后发生内存损坏(Heikki Linnakangas)§
PostgreSQL 项目感谢 Jayden Sarveshkumar 报告此问题。(CVE-2026-116328)
修复 tsvector_delete() 中的缓冲区越界写入(Anthropic OSS program)§
精心构造的输入可能诱使 tsvector_delete() 写入超出为其结果分配的空间的字节。
PostgreSQL 项目感谢 the Anthropic OSS program 报告此问题。(CVE-2026-116315)
修复 ts_rank_cd() 中的缓冲区越界写入(Anthropic OSS program)§
精心构造的输入可能诱使 ts_rank_cd() 写入超出为其结果分配的空间的字节。
PostgreSQL 项目感谢 the Anthropic OSS program 报告此问题。(CVE-2026-116317)
防止通过元素赋值构造无效的 name 值(Tom Lane)§
array_set_element() 可能被滥用,使 name 类型值的最后一个字节变为非零。随后使用该值时就会发生越界读取,导致崩溃或泄露服务器内存。同时也禁止通过此机制构造编码无效的字符串。
PostgreSQL 项目感谢 the Anthropic OSS program 报告此问题。(CVE-2026-116321)
将应用于 CaseTestExpr 或内部 Param 节点的可泄露函数视为会泄露信息(Tom Lane)§
CaseTestExpr 或内部 Param 表示查询中其他位置的表达式的值。如果该表达式包含 Var,就存在信息泄露的可能。因此,在判断表达式是否不泄露信息时,应拒绝此类情况。
PostgreSQL 项目感谢 Only see myself 报告此问题。(CVE-2026-116327)
不再为输入类型与输出类型不匹配的聚合生成基于索引的计划(Tom Lane)§
此前,只要聚合附有 SORTOP 选项,就会不加检查地生成此类计划。基于索引的计划会返回聚合的输入列,如果其声明的输出类型不同,就会造成类型违规,甚至可能执行任意代码。在 master 分支中,禁止此类聚合声明。在已发布的分支中,增加规划时检查,在类型不匹配时不生成此类计划。
PostgreSQL 项目感谢 Zheng Yu, Claude and Ada Logics 报告此问题。(CVE-2026-116331)
避免在先执行 INSERT 再执行 UPDATE 的 MERGE 中向触发器过渡表插入错误的元组(Heikki Linnakangas,Jacek Bylina,Jacob Robertson,Nigel Gott)§
PostgreSQL 项目感谢 Jacek Bylina, Timothy Ball, Claude and Ada Logics 报告此问题。(CVE-2026-116312)
检查互为交换子或求反器的操作符对是否返回相同的数据类型(Tom Lane)§
此前,替换为交换子或求反器操作符可能导致类型违规。此补丁还修正了一些情况:一个操作符通过交换子/求反器链接指向另一个操作符,但后者没有反向链接到前者。
PostgreSQL 项目感谢 Claude and Ada Logics 报告此问题。(CVE-2026-116335)
防止索引谓词和表达式中的函数通过操纵索引破坏 REINDEX CONCURRENTLY(Michael Paquier)§
PostgreSQL 项目感谢 Florent Saudel 报告此问题。(CVE-2026-116336)
防止在 CREATE EXTENSION 期间重命名目标模式,或将扩展安装到临时模式,从而破坏新安装的扩展(Noah Misch)§§
攻击者经过巧妙设计,可能用自己创建的对象替换扩展中的对象。
PostgreSQL 项目感谢 Noah Misch 报告此问题。(CVE-2026-6467)
在扩展脚本替换中拒绝更多不安全的名称(Nathan Bossart)§
此前已拒绝包含引号、反斜杠和美元符号的模式名称与所有者名称,但包含换行符、回车符、注释分隔符或替换词元本身的名称仍可实现 SQL 注入。现在也拒绝所有这些情况。
PostgreSQL 项目感谢 the Anthropic OSS program, Sven Klemm, and Aaron Chen 报告此问题。(CVE-2026-120153)
在 to_json() 和其他转换为 JSON 的代码中调用类型转换函数前检查 EXECUTE 权限(Nathan Bossart,Anthropic OSS program)§
通常此类函数本就向公众授予了 EXECUTE 权限,但这能使其行为与正常执行类型转换时一致。
PostgreSQL 项目感谢 Filip Janus and the Anthropic OSS program 报告此问题。(CVE-2026-116303)
在外键约束检查中调用类型转换函数前检查 EXECUTE 权限(Nathan Bossart)§
通常此类函数本就向公众授予了 EXECUTE 权限,但这能使其行为与正常执行类型转换时一致。
PostgreSQL 项目感谢 Noah Misch 报告此问题。(CVE-2026-116303)
防止 DROP OWNED BY 修改不属于当前用户的表上的行级安全策略(Zsolt Parragi,Anthropic OSS program)§
此前,无特权角色可以将自身从不属于自己的表上的限制性策略中移除。现在改为发出警告,与当前用户无法撤销权限时的既有处理一致。
PostgreSQL 项目感谢 Zsolt Parragi and the Anthropic OSS program 报告此问题。(CVE-2026-116311)
禁止受安全限制的操作在临时模式中创建类型(Anthropic OSS program,Nathan Bossart)§
此前已禁止在此上下文中创建临时表,但类型也可能遮蔽永久对象,从而导致权限提升。
PostgreSQL 项目感谢 the Anthropic OSS program 报告此问题。(CVE-2026-116316)
避免 FDW 批量插入中的越界访问(Nathan Bossart)§
PostgreSQL 项目感谢 Sumedh Pathak and Sven Klemm 报告此问题。(CVE-2026-120149)
拒绝为瞬态类型的表达式创建扩展统计信息(Masahiko Sawada)§
禁止对类型不能用作表列类型的表达式执行 CREATE STATISTICS,其中最典型的是匿名记录类型。这可以防止其他会话误解存储的值。
PostgreSQL 项目感谢 Mehmet Ince 报告此问题。(CVE-2026-120148)
拒绝将系统目录用作逻辑复制目标(Masahiko Sawada)§
PostgreSQL 项目感谢 Qian Zhang 报告此问题。(CVE-2026-120145)
在应用用户限定条件之前,根据 RLS 策略检查 ON CONFLICT 的目标行(Peter Geoghegan,Zsolt Parragi)§
此前,可泄露信息的限定表达式能够看到 RLS 策略本应禁止其看到的行。
PostgreSQL 项目感谢 Peter Geoghegan, Zsolt Parragi, Only see myself, the Anthropic OSS program, Joao Detomini, Josef Šimánek, and Qing Xu 报告此问题。(CVE-2026-120154)
验证复制订阅和 contrib/dblink 中的所有连接选项(Jacob Champion)§
此前,这些检查的应用不一致。
PostgreSQL 项目感谢 Andrey Krasichkov, Bashir Altawil, and Zsolt Parragi 报告此问题。(CVE-2026-14661)
禁止将 SQL 函数声明为返回 "any" 类型(Peter Geoghegan)§
这会导致类型违规。
PostgreSQL 项目感谢 Peter Geoghegan, Claude and Ada Logics 报告此问题。(CVE-2026-18447)
加固更多内存大小计算,防止整数溢出(Álvaro Herrera)§§
PostgreSQL 项目感谢 Hillai Ben Sasson, Jayden Sarveshkumar, and Mehmet Ince 报告此问题。(CVE-2026-120139)
修复返回 RECORD 的集合返回函数在查询目标列表中物化时的类型混淆(Melanie Plageman,Robert Haas)§
多次调用共用同一个元组描述符,这并不安全,因为实际记录类型可能发生变化。
PostgreSQL 项目感谢 Peter Geoghegan 报告此问题。(CVE-2026-120141)
在 PL/pgSQL 记录字段赋值中处理并发的行类型变更(Tom Lane)§
PostgreSQL 项目感谢 Claude and Ada Logics 报告此问题。(CVE-2026-120151)
在 PL/Perl 和相关 contrib 模块中支持“绑定”的 Perl 对象(Andrey Rachitskiy)§
此前,如果将绑定对象传给 PL/Perl 操作,它很可能会被当作 undef,因为我们没有对传入值执行 Perl 的 get magic。绑定哈希只能部分工作:可以读出键,但其值总是读作 undef。
此项更改最初计划只用于 master 分支,因为它看起来像是在增加功能。但随后发现,即使没有此补丁,绑定对象也可能触发各种达到安全漏洞级别的异常行为。因此,先将此项更改回补到旧分支,比尝试分别保障两套行为的安全更为合适。(CVE-2026-116326)
修复 PL/Perl 对绑定对象抛出错误的处理(Tom Lane,Andrew Dunstan)§§
PostgreSQL 项目感谢 Ngoc Tran, the Anthropic OSS program, and Dwij Mehta 报告此问题。(CVE-2026-116326)
修复 PL/Perl 的 get_perl_array_ref() 中的类型混淆(Andrew Dunstan)§
PostgreSQL 项目感谢 Zheng Yu 报告此问题。(CVE-2026-116309)
修复扫描 Perl 数组和哈希时释放后使用内存的问题(Tom Lane,Anthropic OSS program)§
PostgreSQL 项目感谢 the Anthropic OSS program 报告此问题。(CVE-2026-116320)
修复 plperl_return_next_internal() 中释放后使用内存的问题(Anthropic OSS program)§
PostgreSQL 项目感谢 the Anthropic OSS program and Ngoc Tran 报告此问题。(CVE-2026-116319)
修复 PL/Perl 中释放正在执行的预备查询所触发的释放后使用内存问题(Masahiko Sawada)§
PostgreSQL 项目感谢 Zheng Yu and the Anthropic OSS program 报告此问题。(CVE-2026-116307)
修复重入使用 PL/Tcl 时释放后使用内存的风险(Tom Lane)§
PostgreSQL 项目感谢 the Anthropic OSS program 报告此问题。(CVE-2026-116323)
拒绝重入使用 contrib/dblink(Masahiko Sawada)§
PostgreSQL 项目感谢 Jiyong Ahn 报告此问题。(CVE-2026-120147)
在 contrib/dict_int 中为零长度词元返回 NULL(Nathan Bossart,Anthropic OSS program)§
此行为与其他全文检索词典类型一致,并避免了此前可能发生的服务器内存泄露。
PostgreSQL 项目感谢 Nathan Bossart and the Anthropic OSS program 报告此问题。(CVE-2026-116308)
使 \[un]restrict 命令在 pg_dump 的 tar 格式输出中生效(Noah Misch)§
这为使用未记入文档的 restore.sql tar 成员的用户提供了预期的保护。
PostgreSQL 项目感谢 Pavel Kopylov 报告此问题。(CVE-2026-116330)
增强 pg_restore 对损坏归档文件的防护(Dilip Kumar,Yonghwa Lee,Nathan Bossart)§
此补丁修复了越界访问和文件路径遍历风险。仍有其他问题尚未解决,但它们似乎不构成安全漏洞。
PostgreSQL 项目感谢 Dilip Kumar, Yonghwa Lee, OpenSec, and Ben Dixon 报告此问题。(CVE-2026-116314)
修复 pg_basebackup 使用受外部控制的格式字符串的问题(Peter Eisentraut)§
只有服务器数据目录中存在名称异常的文件时,才可能触发此问题。
PostgreSQL 项目感谢 Peter Eisentraut 报告此问题。(CVE-2026-16240)
禁用 bpchar 数据类型的 B-树索引去重支持(Shihao Zhong,Peter Geoghegan)§
索引去重对 bpchar 并不安全,因为其相等判定比逐位相等更宽松。具体而言,bpchar 的相等比较会忽略尾随空格,因此长度不同的值可能被判定为相等。去重随后会使仅索引扫描返回细微错误的结果。
此补丁对新索引项禁用去重,但不会修复现有索引项中可能存在的损坏。因此,在 bpchar 列上建有 B-树索引的用户,应在安装此更新后对这些索引执行 REINDEX。
请注意,此问题只影响声明为 bpchar、即不带任何长度约束的列。更常见的 CHAR( 用法没有风险,虽然它使用相同的底层代码,但长度约束会使其他方面相等的字符串具有相同的长度,从而逐位相等。n)
确保 VACUUM 清理 GIN 索引中的所有死元组(Peter Geoghegan)§§
当一次 VACUUM 操作需要多次扫描索引时(因为要移除的元组数量超过一次能放入内存的数量),可能漏掉一些应当移除的索引项。另一个涉及与叶子页分裂发生竞态的错误也有相同影响。这些错误最终会导致索引损坏,使索引项指向不相关的表行。如果怀疑已发生这种情况,建议执行 REINDEX。
修复未完成页分裂之后的 GIN 倒排树页面删除(Peter Geoghegan)§
删除步骤可能错误地断开兄弟页面,导致后续索引搜索漏掉行。如果怀疑已发生这种情况,建议执行 REINDEX。
修复未能更新 TOAST 表索引的可变 pg_index 字段的问题(Bharath Rupireddy)§
REINDEX CONCURRENTLY 可以更改这些字段,但关系缓存没有预料到这一点,导致索引更新可能被遗漏。最终可能因缺少索引项而出现“missing chunk number”错误。幸运的是,这些错误仅表示索引损坏;TOAST 表本身正常,因此执行 REINDEX 就足以恢复。
通过修改查询的语法解析树来移除连接,而不再尝试修补规划器衍生的数据结构(Tom Lane,Richard Guo,Shihao Zhong,Ayush Tiwari)§§§§§§§§
规划器中原有的连接移除实现在多年间出现过许多错误,其中一些从未得到修复。它本身很脆弱,因为规划器衍生数据结构的变化常常要求同步调整连接移除逻辑,却没有简单的方法保持这些代码同步。现在改为修改简单得多的语法解析树表示,再循环重新生成所有衍生数据。这是一项重大更改,通常我们绝不会考虑将其回补到旧分支,但旧实现可能持续产生错误,促使我们承担这一风险。
修复横向引用触发的多种规划器错误(Richard Guo)§§§§§§§§§§
这些错误可能生成不正确的查询计划并返回错误结果,也可能导致“failed to build any N-way joins”等规划器内部错误。
为由 SubLink 转换而来的反连接分配关系 ID,以确保正确放置包含 PlaceHolderVar 的限定子句(Richard Guo)§
这可以避免某些边界情况:此类限定条件被下推到反连接右侧,导致其语义与预期相反。
修复作为嵌套循环参数的 PlaceHolderVar 的放置位置(Richard Guo)§
在极少数情况下,规划可能失败并报出“failed to assign all NestLoopParams to plan nodes”、“plan should not reference subplan's variable”或“variable not found in subplan target list”错误。
避免排序键为 PlaceHolderVar 时规划器失败(Richard Guo)§§
根据所选计划的形状,此类情况可能产生错误结果,也可能报出“variable not found in subplan target lists”错误。
修复重新结合外连接后错误丢弃外连接子句的问题(Richard Guo,Nitin Motiani)§
避免整行 Var 引用一个连接并出现在外连接下方时发生“unsupported join alias expression”错误(Richard Guo)§
在展开整行连接别名引用时正确处理 SubLink(Richard Guo)§
这一遗漏导致“cannot handle unplanned sub-select”或“unrecognized node type”等错误。
当子查询的目标列表含有任何集合返回函数时,不再假定 DISTINCT ON 能确保子查询输出行的唯一性(Richard Guo)§
这一假定不成立,因为集合返回函数可能在去重步骤之后求值。
修复带有常量测试表达式的简单形式 CASE 内部、带 RETURNING 子句的 JSON 构造器被错误地进行常量折叠的问题(Richard Guo)§
修复查询指定 FETCH ... WITH TIES 时 MIN()/MAX() 索引扫描的错误行为(Chaitanya Choudhary)§
WITH TIES 选项被意外复制到为执行索引扫描而生成的子 SELECT 中,可能触发“more than one row returned by a subquery used as an expression”错误。
对半连接右侧去重时使用正确的排序规则(Andrey Rachitskiy)§
此问题只在连接比较子句使用非确定性排序规则时发生,因为所有确定性排序规则对字符串相等性的判断都一致。但在此情况下,可能产生包含过多行的错误结果。
在 INSERT ... ON CONFLICT 期间对冲突行获取谓词锁(Zsolt Parragi,Andrey Borodin)§§
此前未这样做,导致可串行化模式下行为不正确,允许本应以串行化错误失败的并发更新。
修复不正确的多列 RANGE 分区剪枝(David Rowley)§
对 RANGE 分区表执行分区剪枝时,如果裁剪限定条件仅涉及分区键的一个前导前缀,分区剪枝可能移除一些不应被裁剪的分区(导致漏掉本应找到的行),也可能包含一些不需要的分区。
修复使用 MINVALUE 或 MAXVALUE 边界的范围分区表中错误剪枝 DEFAULT 分区的问题(Ewan Young)§
在某些情况下,代码会错误地认定无需扫描 DEFAULT 分区,从而漏掉一些本应匹配查询的行。
修复查询对同一列应用多个排序键时的问题(David Rowley,Ayush Tiwari)§§
某些查询可能使后端进程崩溃,其他情况下则会忽略附加的排序指定。通常这些附加指定确实是冗余的,因为第一个指定就能完全确定结果顺序。但使用非确定性排序规则,或查询使用不同的 ORDER BY 操作符时,并不一定如此。
确保 Memoize 计划节点使用正确的输入排序规则(Shihao Zhong)§
这只在使用非确定性排序规则时有影响。
修复 Gather 下方的 Memoize 计划节点丢失并行工作进程统计信息的问题(Tatsuya Kawata)§
EXPLAIN ANALYZE 只报告了自上次重新扫描 Gather 以来的统计信息。
如果函数定义使用数组或类型修饰符语法指定未知的返回类型名称,则不创建 shell 类型(Heikki Linnakangas)§
此类情况显然是错误,因为在对类型进行任何高级操作之前,应先创建该类型。
修复快照导出和导入,使其能够正确处理恢复期间取得的快照(Peter Geoghegan,Bertrand Drouvot)§
此类快照的数据布局不同,但导出/导入逻辑并不知道这一点,导致导入的快照行为不正确。这不仅会使导入事务返回错误结果,还可能因错误设置提示位而造成持久的数据损坏。
已知在备库上运行并行 pg_dump 会触发此错误。在这种情况下,它可能同时损坏转储输出和备库的数据。
修复事务快照导入中的原子性问题(Chee Wooson)§
曾存在一个时间窗口,使其他观察者可能无法看到源事务仍在运行,这可能导致 VACUUM 等作出错误判断。
修复严格 jsonpath 查询中对普通标量字符串的 GIN 索引搜索(Rui Zhao)§
对 strict $ == "scalar" 之类的 jsonpath 执行 jsonb_ops 索引扫描时,未能找到值仅为 "scalar" 的表项。
修复从 jsonpath 查询提取 GIN 索引扫描条件时的错误(Tom Lane)§
NOT 操作符下方的 AND 操作符可能被错误实现。此外,对字面常量应用方法(例如 "42".double())也未得到正确处理。这些错误不会产生可见的报错,但 GIN 索引搜索会漏掉部分或全部本应匹配的行。
修复 SP-GiST 四叉树 <@ 搜索中的边界情况错误(John Naylor)§
由于舍入误差,搜索有时可能不会进入需要搜索的象限,导致查询结果不完整。
修复 SP-GiST 四叉树索引在边界情况下的失败(Ayush Tiwari)§
舍入误差可能使搜索和插入报出“getQuadrant: impossible case”错误。
在二进制输入中接受空 tsquery 值(Ayush Tiwari)§
其他位置允许空 tsquery 值,但 tsqueryrecv() 此前会失败。
在 tsquery 值的二进制输入中禁止零长度词位和超出范围的短语距离值(Tom Lane)§
文本输入中已拒绝这些情况,但 tsqueryrecv() 遗漏了等效检查,因而接受了后续无法转储/重新载入的值。
在 tsquery 和 ltxtquery 输入中,将操作符嵌套过深的错误视为软错误(Tom Lane)§
在 tsvector 和 tsquery 中一致地执行最大长度限制(Tom Lane)§
有些位置认为词位最大长度是 MAXSTRLEN(2047),另一些位置则认为是 MAXSTRLEN-1。幸运的是,较宽松的边界才是正确的,因此现在统一使用 MAXSTRLEN。同样,对于数据总长度上限 MAXSTRPOS,有些位置的限制比其他位置更严格。这些修复避免了合法构造的值无法转储/重新载入的情况。
修复长度参数为 INT_MIN(-2147483648)时的 right()(Ewan Young)§
由于整数溢出,该函数在本应返回空字符串时返回了整个字符串。
修复 pg_blocking_pids(),使其正确计入关系扩展锁(Bertrand Drouvot)§
修复 pg_indexam_progress_phasename() 中混淆 32 位与 64 位的问题(Markos Fountoulakis)§
此函数碰巧能在常见硬件上正常工作,但在 32 位或大端平台上可能行为异常。
检测 to_char() 使用 V 格式时的整数溢出(Andrey Rachitskiy)§
如果数据值为整数,且将其乘以 V 格式所隐含的 10 的幂会导致整数溢出,to_char() 此前会悄然输出错误数字。现在改为抛出整数溢出错误。
避免计算 tid 值的 BRIN minmax_multi 距离时发生整数溢出(Tomas Vondra)§
很大的 tid 值可能产生负距离,最终使索引效率低下,但并不会实际损坏索引。
避免计算 numeric 值的 BRIN minmax_multi 距离时溢出,并正确处理 NaN(Kirill Reshke,Tomas Vondra)§
这些遗漏可能导致报错(阻止索引汇总),或使索引效率低下。
避免计算 numeric 范围的差值时溢出(Kirill Reshke)§
在此上下文中,我们希望返回正无穷或负无穷,而不是抛出溢出错误。
支持 Hunspell 词缀文件中不在预期位置的 FLAG 行(Ewan Young)§
Hunspell 词缀文件通常将 FLAG 行放在最前面,而我们的实现隐含依赖了这一点。如果它位于某些含义依赖 FLAG 设置的行之后,就会导致崩溃或无法匹配复合词。现在修复逻辑,使 FLAG 行可以位于任意位置。
修复规则逆解析中的多种错误(Henson Choi)§§§§
在 UPDATE、DELETE 或 MERGE 的目标关系别名前始终输出 AS,避免别名为 set 时产生歧义。同时确保 结构和子查询的左侧参数有充分的括号。还修复了视图 xml IS DOCUMENTFROM 子句中 AT TIME ZONE 及类似结构的逆解析;这些结构需要用无实际效果的 CAST 包裹。这些错误可能因视图中的语法错误而阻止转储恢复,也可能使重新载入的视图被解析为与此前不同的内容。
修复多行 INSERT ... VALUES 在目标列下标中含有子 SELECT 时解析器失败的问题(Amit Langote)§
这会导致“unexpected non-SELECT command in SubLink”错误。
修复 COPY FROM 中遗漏 WHERE 子句预处理的问题(Nathan Bossart)§
这一遗漏会在操作符被取反时导致“cache lookup failed for function 0”错误,也很可能影响其他情况。
修复与 DROP TABLESPACE 相关的竞态条件(Ayush Tiwari)§
如果 DROP 与尝试向该表空间添加新对象的命令并发执行,最终可能导致系统目录内容不一致。
在恢复期间明确拒绝对不记录 WAL 的表的操作(Jim Jones)§§
不记录 WAL 的表在备库上没有数据,因此读取它必须失败。多数操作对此会给出恰当错误,但 COPY ... TO 和 currtid2() 此前会报出内部“could not open file”错误。
修复角色成员资格变更中不一致的权限检查(ChangAo Chen)§
这修复了本应报告权限不足,却报出内部“no possible grantors”错误的情况。
撤销此前对空闲空间映射持久化的更改(Alexander Korotkov)§
事实证明,c06d1a4ba 等提交(包含在 2026 年 5 月的版本中)引入的问题比解决的问题更多。
当默认事务模式为 SERIALIZABLE READ ONLY DEFERRABLE 时,避免后端进程退出时在临时表清理中挂起(Andrey Rachitskiy)§
清理会阻塞,直到并发的可串行化事务完成;如果其中一些是预备事务,等待可能无限持续。
避免描述一个游标已经不存在的 FETCH 语句时崩溃(Dirkjan Bussink)§
持有锁时若请求清理延迟休眠,则不休眠(Kevin Rocker,Andrey Borodin,Mostafa)§
同时,将若干已有的延迟调用移到真正可以安全休眠的位置。
如果用于检查外键约束的查询计划仍在使用,则不释放它(Lucas Jeffrey,Trakshan Mishra,Amit Langote)§
在刻意构造的情况下可能触发此行为,例如带有执行 DML 的触发器的表上存在自引用的 ON DELETE CASCADE 外键。
修复 B-树索引中多层页面删除的 WAL 记录(Peter Geoghegan)§
WAL 日志可能包含待删除页面的过时兄弟链接值,在启用 wal_consistency_checking 时引发备库报错。只要没有崩溃,删除动作完成后很快就会修复损坏,因此此错误通常只影响报错信息。
确保检查点期间以原子方式写出待处理预备事务的状态文件(Shihao Zhong)§
此前,崩溃可能留下无效的状态文件,导致后续数据库启动失败。
不在中止预备事务的中途启动检查点(Shihao Zhong)§
崩溃可能使该事务随后被提交,导致状态不一致。
不在创建多事务的中途启动检查点(Shihao Zhong)§
这可以避免随后发生崩溃时可能出现的数据丢失。
修复被随后中止的子事务更新过的元组可能丢失的问题(Shihao Zhong,Michael Paquier)§
表重写(例如 CLUSTER 或 VACUUM FULL)可能将此类元组当作无效元组丢弃。
将元组存入元组表槽时不丢失其 tid(Virender Singla,Greg Burd)§
某些代码路径忽略了复制 tid 字段,在特殊情况下可能导致数据损坏或查询结果错误。
避免将分区索引标记为有效时的竞态条件(Andrey Borodin,Kirill Reshke)§
例如,这可能使并行 pg_restore 因过早尝试重建外键约束而失败。
修复多事务 ID 中对已中止的更新事务的检查(Chee Wooson)§
这一编码错误的已知后果包括意外的“new multixact has more than one updating member”错误,以及错误地无法更新行。
在桶分裂期间开始的哈希索引扫描可能漏掉某些索引项(Peter Geoghegan,Amit Kapila)§
修复 TID 范围扫描中不正确的位置跟踪(Ewan Young,David Rowley)§
先向后提取再向前提取的操作序列,可能无法一直扫描到范围末尾。
避免在基础备份中读取 pg_control 文件可能发生撕裂的副本(David Steele)§§§
对该文件的并发写入可能导致备份包含不一致的数据。
防止在基础备份中错误地复制非关系文件(David Steele)§
postgresql.auto.conf 等经常通过原子重命名替换的文件,在备份与这种替换并发进行时,可能在备份中被截断或填充零。
确保基础备份报告仅影响单个页面的校验和失败(Zsolt Parragi)§
由于逻辑错误,只有同一文件中不止一个页面损坏时,pg_stat_database 才会累计校验和失败。
在为 output_plugin_libraries 参数赋值时验证其语法(Jacob Champion,Hayato Kuroda)§
此前,语法错误的值可以写入 postgresql.conf,导致逻辑复制失败。
避免复制槽失效期间错误更新后端状态标志(Vlad Lesin)§
检查点进程等辅助进程执行失效操作时,可能破坏一个无关后端进程的状态字段。后果难以预测,但一种可能性是热备反馈实际上被禁用。
在逻辑复制中更好地处理子事务中止(Bingshuai Li,Hayato Kuroda,Zhijie Hou)§
如果一个更新了系统目录的子事务中止,逻辑解码仍错误地认为该更新有效,可能产生不正确的解码输出。
避免构建初始解码快照时的竞态条件(Antonin Houska,Rui Zhao)§
使用包含已提交但尚未设置 CLOG 状态的事务的快照,存在较小的数据损坏风险。
避免 pgoutput 逻辑复制发送器因复制选项缺少值而发生空指针崩溃(Zhijie Hou)§
修复 pgoutput 处理流式传输的预备事务时的少量内存泄漏(Ayush Tiwari)§
修复物理 WAL 发送器丢失唤醒的问题(Alex Speller)§
此修复更正了 WAL 发送进程在已有待发送数据时仍可能休眠的某些情况。
修复 WAL 接收器跟随时间线切换时重复创建临时复制槽的问题(ChangAo Chen)§
这一错误会先引发“could not create replication slot”错误,随后 WAL 接收器重启并恢复,因此不会造成永久损害。
修复逻辑复制订阅者与并发索引 DDL 之间的竞态条件(Mikhail Nikalayeu,Vignesh C)§
更改复制目标关系的主键索引或复制标识索引的状态,可能使复制应用逻辑漏掉匹配行(但每次此类事件最多漏掉一次)。
修复 WAL 解码错误消息中不正确的 LSN(Rahul Yadav)§
这些错误消息所报告的 LSN,对应的并不是实际引发报错的那条 WAL 记录。
不允许 REPLICA IDENTITY FULL 查找选择无效索引(Mikhail Nikalayeu)§
此前,逻辑复制可能尝试使用失败的 CREATE INDEX CONCURRENTLY 所留下的索引,而该索引很可能不完整,从而产生错误结果。
修复 WAL 发送器中可能出现的释放后使用内存问题(Ayush Tiwari)§
避免 jsonb_set_lax() 中释放后使用内存的问题(John Naylor)§
修复 XMLSERIALIZE(... INDENT) 输出超过 1GB 时的重复释放(Jim Jones)§
修复并发删除模式时可能发生的空指针解引用(Baji Shaik)§
避免逻辑订阅刷新过程中相关关系被并发删除时发生空指针崩溃(Satyanarayana Narlapuram,Bharath Rupireddy)§
修复为表达式构建扩展统计信息时可能发生的空指针解引用(Shihao Zhong,Michael Paquier)§
只有自定义 typanalyze 函数表现出意外(但合法)的行为时,才可能触发此错误。
修复 pg_locks.waitstart 的值可能过时的问题(Shihao Zhong)§
增强 pgstats 代码对仅部分完成的本地 pgstats 表项的防护(Michael Paquier)§
修复复用的 pgstats 表项的清理(Michael Paquier)§
此错误导致 pgstats 表项泄漏,可能在后端进程退出或数据库关闭时引发错误。
修复未释放 WAL 读取器关联的全部数据所导致的内存泄漏(Tomás Senart)§
在许多情况下,这一遗漏影响不大,因为其所在内存上下文很快就会被重置或删除。但某些情况下可能导致长期的内存膨胀,尤其是在检查点进程中。
避免跨许多列计算 ndistinct 扩展统计信息时的内存膨胀(Ilia Evdokimov)§
修复哈希索引桶分裂清理失败后缓冲区钉住计数泄漏的问题(Peter Geoghegan)§
这一编码错误的后果仅限于资源泄漏警告。
确保为 AFTER 触发器打开的所有关系都被重新关闭(Hayato Kuroda,David Rowley)§
这一遗漏会触发“resource was not closed”警告,但不会造成更严重的后果。
修复 PL/pgSQL 对 anycompatiblemultirange 参数和结果的处理(Jeevan Chalke)§
PL/pgSQL 的多态类型识别中未加入此类型,导致尝试创建或使用以该类型声明的函数时报错。
增强 PL/Perl 和相关 contrib 模块对“绑定”的 Perl 哈希与数组的防护(Tom Lane)§§
依靠 av_count() 判断 Perl 数组长度,而不是查找空指针;另一方面,更谨慎地处理从数组和哈希提取值时意外出现的空值指针。目前只知道这些情况会在“绑定”对象中发生。
避免 libpq 重复建立 GSS 连接时的内存泄漏(Matt Carter,Tom Lane)§
确保 psql 统计多查询命令字符串中出现的所有 COPY FROM STDIN 命令(Zsolt Parragi)§
修复 CVE-2026-6464 后,psql 会拒绝同一字符串中出现的多个 COPY FROM STDIN 命令,因为它没有预期会发生多次 COPY 操作。
修复 psql 中少量内存泄漏(Fujii Masao)§
使 pg_dump 转储用于支持约束的索引的列统计目标(Zsolt Parragi)§
此前,pg_dump 会在普通索引需要时输出 ALTER INDEX ... SET STATISTICS 命令,但不会为通过表达式上的 EXCLUDE 约束创建的索引这样做。
在 pg_dump 的 tar 格式输出中,不向 restore.sql tar 成员写入无效的 \restrict/\unrestrict 命令(Pavel Kopylov)§
修复表带有列默认值子句时 contrib/file_fdw 在 ANALYZE 中崩溃的问题(Fujii Masao)§
修复 contrib/pg_trgm GiST 索引可能损坏的问题(Nate Clark)§
合并索引项时可能丢失用于标识其格式的标志,从而使后续索引搜索漏掉匹配行。
此修复不会修复已有索引。用户应在更新后对已有的 gist_trgm_ops 索引执行 REINDEX。
修复 Windows 上设置计时器时的错误检查(Sehrope Sarkuni)§
未能检测到创建超时管理线程失败,导致后续超时请求悄然失效。
在 AArch64 上的 TAS_SPIN 中使用不加锁的初始测试(Nathan Bossart)§
这项代码更改已被证明能提高多核 AArch64 机器的性能,同时不会损害核心数较少的机器的性能;此外,它还避免了较新 Linux 内核带来的性能回归。
将时区数据文件更新至 tzdata 2026f 版本(Tom Lane)§§§
加拿大西北地区从 2026 年 11 月起全年采用 UTC-06(实际上是永久夏令时)。这仅影响 America/Inuvik,因为该地区其他部分由 America/Edmonton 覆盖,后者的相应更改已在 2026c 中发布。同样,曼尼托巴省(America/Winnipeg)改为全年采用 UTC-05。目前假定其时区缩写分别为 CST 和 EST。
古巴没有在 2026-11-01 将时钟拨回;今年冬季将继续采用夏令时(但似乎计划明年恢复正常)。
用于向后兼容的时区名称 EST5EDT、CST6CDT、MST7MDT 和 PST8PDT 对旧时间戳的行为现在更加简单。它们会无限向前追溯地使用名称所指示的 UTC 偏移量和时区缩写,不再混入相应城市命名时区的部分历史行为。这更符合 POSIX。
修正了巴西、哥伦比亚、伊朗和爱尔兰的历史时区数据。
在 Windows 上,initdb 现在能够识别 Microsoft 为更新后的加拿大时区制定的新时区名称。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。英文原文本身的问题请通过上游文档表单反馈给 PostgreSQL 文档维护者。