↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

文档版本比较

POSTGRESQL · VERSION COMPARE

PostgreSQL 13.16 发布变化

此版本的完整功能、修复与兼容性说明,以及其他版本的关联记录。

此版本的完整变化
此版本的完整变化

包括起始版本之后至目标版本的变化。大版本号表示该分支的首个版本。

完整发布变化

13.16

2024-08-08

导出 JSON ↓
36项变化功能、修复、改进
1个版本按版本分组
2CVE独立漏洞编号

13.16stable支持截止 2025-11-13

安全变化
CVE / 问题严重程度修复版本所选版本状态
CVE-2024-7348

防止在 pg_dump 期间执行未经授权的代码

13.16已记录修复
CVE-2023-5869

检测计算新数组维度时的另一个整数溢出情况

13.13已记录修复

PostgreSQL 13.16

迁移与兼容性

对于运行 13.X 的用户,不需要执行导出/恢复。

但是,如果是从早于 13.14 的版本升级,请参见第 E.10 节。

安全防止在 pg_dump 期间执行未经授权的代码

变更

防止在 pg_dump 期间执行未经授权的代码(Masahiko Sawada)§

能够创建和删除非临时对象的攻击者可以注入 SQL 代码,该代码将由并发的 pg_dump 会话以运行 pg_dump 的角色权限(通常是超级用户)来执行。该攻击涉及将序列或类似对象替换为会执行恶意代码的视图或外部表。为防止此问题,引入了新的服务器参数 restrict_nonsystem_relation_kind,可以禁止展开非内置视图以及访问外部表,并教会 pg_dump 在可用时设置该参数。请注意,只有当 pg_dump 和它正在导出的服务器都足够新以包含此修复时,才能防止该攻击。

PostgreSQL 项目感谢 Noah Misch 报告此问题。(CVE-2024-7348)

关联记录 (4)
问题修复修复在将表作为分区附加后的失败,如果该表之前有继承子表

变更

修复在将表作为分区附加后的失败,如果该表之前有继承子表(Álvaro Herrera)§

关联记录 (4)
问题修复修复涉及不一致的基于索引的约束时 ALTER TABLE DETACH PARTITION 的问题

变更

修复涉及不一致的基于索引的约束时 ALTER TABLE DETACH PARTITION 的问题(Álvaro Herrera,Tender Wang)§ §

当分区表有一个不与约束关联的索引,但某个分区有一个等效的索引且该索引与约束关联时,分离该分区会出现异常行为,导致前分区的约束具有不正确的 coninhcount 值。这会在后续对该约束进行任何操作时引发问题。

关联记录 (4)
问题修复修复过程的多态输出参数的处理

变更

修复过程的多态输出参数的处理(Tom Lane)§ §

SQL CALL 语句没有为此类参数解析正确的数据类型,导致诸如 “cannot display a value of type anyelement” 之类的错误,甚至直接崩溃。(但在 PL/pgSQL 中的 CALL 工作正常。)

关联记录 (4)
问题修复修复从 CALL 语句的参数列表中调用稳定函数时的行为

变更

修复从 CALL 语句的参数列表中调用稳定函数时的行为(Tom Lane)§

如果 CALL 处于原子上下文中(例如,有外部事务块),这些函数会被传递错误的快照,导致它们看到自外部事务开始以来已修改的行的过时值。

关联记录 (4)
改进检测 money 计算中的整数溢出

变更

检测 money 计算中的整数溢出(Joseph Koshakow)§

之前 money 类型的所有算术函数都没有检查溢出,因此在溢出的情况下会静默地给出错误的结果。

关联记录 (4)
问题修复修复 round(numeric) 和 trunc(numeric) 中对小数位参数过于激进的截断

变更

修复 round(numeric) 和 trunc(numeric) 中对小数位参数过于激进的截断(Dean Rasheed)§

这些函数将小数位参数截断到 +/-2000,但有些有效的使用场景需要更大的值;在这些情况下函数返回了不正确的结果。改为截断到 numeric 类型实际允许的范围。

关联记录 (4)
改进防止 pg_sequence_last_value() 在备库上的不记录 WAL 的序列和其他会话的临时序列上失败

变更

防止 pg_sequence_last_value() 在备库上的不记录 WAL 的序列和其他会话的临时序列上失败(Nathan Bossart)§

在这些情况下改为返回 NULL 而不是抛出错误。

关联记录 (4)
问题修复修复 websearch_to_tsquery() 中对被忽略操作符的解析

变更

修复 websearch_to_tsquery() 中对被忽略操作符的解析(Tom Lane)§

根据手册,websearch_to_tsquery() 输入中的标点符号除了短划线和引号的特殊情况外都会被忽略。然而,紧接在 or 之前出现的圆括号和其他一些字符可能导致 or 被当作数据词处理,而不是按预期作为 OR 操作符。

关联记录 (4)
安全检测计算新数组维度时的另一个整数溢出情况

变更

检测计算新数组维度时的另一个整数溢出情况(Joseph Koshakow)§

拒绝将数组维度 [-2147483648:2147483647] 应用于空数组。这与 CVE-2023-5869 密切相关,但看起来是无害的,因为数组最终仍然为空。

关联记录 (4)
改进检测新目录缓存条目在展开其字段时变为过时的另一种情况

变更

检测新目录缓存条目在展开其字段时变为过时的另一种情况(Noah Misch)§

在展开目录元组的行外字段时发生的原地更新可能会被遗漏,导致目录缓存条目缺少原地更改但不被认为是过时的。这仅在 pg_database 目录中可能发生,因此影响范围较窄,但可能会导致异常行为。

关联记录 (4)
改进正确检查由 INSERT ... DEFAULT 目标的视图列的可更新性

变更

正确检查由 INSERT ... DEFAULT 目标的视图列的可更新性(Tom Lane)§

如果这样的列不可更新,我们应该报告相应的错误。但该检查被遗漏了,随后的代码会报告一个不太有用的错误,如 “attribute number N not found in view targetlist”。

关联记录 (4)
改进避免对不正确的递归查询报告无用的内部错误

变更

避免对不正确的递归查询报告无用的内部错误(Tom Lane)§

重新排列错误检查的顺序,以便在 WITH RECURSIVE 查询在 UNION 的第二个分支中没有自引用,但在其他位置(如 ORDER BY)有自引用时,抛出针对性的错误。

关联记录 (4)
改进如果已排队的 AFTER 触发器不再存在,不再抛出错误

变更

如果已排队的 AFTER 触发器不再存在,不再抛出错误(Tom Lane)§

事务有可能执行一个操作将延迟的 AFTER 触发器排入队列以供后续执行,然后在该触发器执行之前将其删除。以前这会导致诸如 “could not find trigger NNNN” 之类的奇怪错误。如果触发器在应该执行时已不再存在,更好的做法是静默地不执行任何操作。

关联记录 (4)
问题修复修复在删除表时未能移除 pg_init_privs 中列级权限条目的问题

变更

修复在删除表时未能移除 pg_init_privs 中列级权限条目的问题(Tom Lane)§

如果扩展在其创建的表上授予了某些列级权限,在扩展被删除后相关的目录条目会残留。这在表的 OID 被另一个关系重新使用之前是无害的,届时可能会干扰 pg_dump 对该关系的导出。

关联记录 (4)
问题修复修复当所需索引具有表达式或谓词时 ON CONFLICT 的仲裁索引选择

变更

修复当所需索引具有表达式或谓词时 ON CONFLICT 的仲裁索引选择(Tom Lane)§

如果使用 ON CONFLICT 的查询通过可更新视图访问目标表,即使存在匹配的索引,也可能报告错误 “there is no unique or exclusion constraint matching the ON CONFLICT specification”。

关联记录 (4)
改进拒绝使用 ALTER TABLE 修改另一个会话的临时表

变更

拒绝使用 ALTER TABLE 修改另一个会话的临时表(Tom Lane)§

权限检查通常会防止出现这种情况,但可以通过修改其子表是另一个会话的临时表的父表来触发。如果我们发现此类子表属于另一个会话,则抛出错误。

关联记录 (4)
问题修复修复从 MIN() 或 MAX() 聚合生成的子查询未能重新计算的问题

变更

修复从 MIN() 或 MAX() 聚合生成的子查询未能重新计算的问题(Tom Lane)§

在某些情况下,在外部查询的某一行计算的聚合结果可能会在不应该被重用时被后续行重用。目前仅在外部查询使用通过 hash 聚合实现的 DISTINCT 时观察到这个问题,但可能存在其他情况。

关联记录 (4)
问题修复避免在 JIT 内联的后端函数抛出错误时崩溃

变更

避免在 JIT 内联的后端函数抛出错误时崩溃(Tom Lane)§

错误状态可能包含指向持有 JIT 编译代码的动态加载模块的指针(用于错误位置字符串)。在某些代码路径中,模块可能在错误报告被处理之前就被卸载,导致在访问位置字符串时发生 SIGSEGV。

关联记录 (4)
改进应对 libxml2 版本 2.13.x 中的行为变更

变更

应对 libxml2 版本 2.13.x 中的行为变更(Erik Wienhold,Tom Lane)§

值得注意的是,我们现在会抑制来自 libxml2 的 “chunk is not well balanced” 错误,除非这是唯一报告的错误。这是为了使 2.13.x 和更早版本的 libxml2 之间的错误报告保持一致。在更早的版本中,该消息几乎总是冗余的或完全不正确的,因此 2.13.x 大幅减少了报告该消息的情况。

关联记录 (4)
问题修复修复启动热备服务器时对预备事务的子事务的处理

变更

修复启动热备服务器时对预备事务的子事务的处理(Heikki Linnakangas)§

当备库的重放从关闭检查点 WAL 记录开始时,主库上已预备但尚未提交的事务会被正确理解为仍在进行中。但预备事务的子事务(由保存点或 PL/pgSQL 异常块创建)没有被考虑在内,会被视为已中止。如果该预备事务后来被提交,这会导致不一致。

关联记录 (4)
改进防止逻辑复制槽的不正确初始化

变更

防止逻辑复制槽的不正确初始化(Masahiko Sawada)§

在某些情况下,复制槽在 WAL 流中的起始点可能被设置为事务内部的某个位置,导致断言失败或不正确的解码结果。

关联记录 (4)
问题修复避免在处理通知或共享失效中断后的内存泄漏

变更

避免在处理通知或共享失效中断后的内存泄漏(Tom Lane)§

这些事件的处理函数可能会将当前内存上下文切换为 TopMemoryContext,导致在不正确的设置被替换之前分配的任何数据产生会话生命周期的泄漏。已观察到与(至少)传入查询的编码转换和附加到 Bind 消息的参数相关的可见泄漏。

关联记录 (4)
改进避免在 Windows 套接字上可能遗漏输入结束事件

变更

避免在 Windows 套接字上可能遗漏输入结束事件(Thomas Munro)§

Windows 在连接的远程端断开连接后只报告一次 FD_CLOSE 事件。在时机不巧的情况下,我们可能会遗漏该报告并无限期等待,或者至少等到超时为止,以期望获得更多输入。

关联记录 (4)
问题修复修复 JSON 解析错误报告中对不完整字节序列的缓冲区越界读取

变更

修复 JSON 解析错误报告中对不完整字节序列的缓冲区越界读取(Jacob Champion)§

当最后几个字节构成不完整的多字节字符时,可能会越过输入缓冲区末尾几个字节。虽然通常是无害的,但原则上这可能导致崩溃。

关联记录 (3)
改进禁用 OpenSSL 创建有状态 TLS 会话票证

变更

禁用 OpenSSL 创建有状态 TLS 会话票证(Daniel Gustafsson)§ § §

这可以避免客户端在收到会话票证后认为支持 TLS 会话恢复时可能出现的失败。

关联记录 (4)
改进当重新规划 PL/pgSQL 的“简单表达式”时,检查它是否仍然是简单的

变更

当重新规划 PL/pgSQL 的“简单表达式”时,检查它是否仍然是简单的(Tom Lane)§

某些相当人为的情况,如删除引用的函数并将其重新创建为聚合,可能导致诸如 “unexpected plan node type” 之类的意外失败。

关联记录 (4)
问题修复修复 PL/Perl 与 Perl 5.40 之间的不兼容性

变更

修复 PL/Perl 与 Perl 5.40 之间的不兼容性(Andrew Dunstan)§

关联记录 (3)
问题修复修复递归返回 RECORD 类型的 PL/Python 函数

变更

修复递归返回 RECORD 类型的 PL/Python 函数(Tom Lane)§

如果递归调用同一个函数并传递不同的列定义列表(AS 子句),会失败,因为内部调用会覆盖外部调用对要返回的行类型的理解。

关联记录 (4)
改进在递归触发器调用时不再损坏 PL/Python 的 TD 字典

变更

在递归触发器调用时不再损坏 PL/Python 的 TD 字典(Tom Lane)§

如果一个 PL/Python 语言触发器导致另一个触发器被调用,为内部触发器创建的 TD 字典会覆盖外部触发器的 TD 字典。

关联记录 (4)
问题修复修复 PL/Tcl 在返回元组的函数结果中报告无效列表语法时的问题

变更

修复 PL/Tcl 在返回元组的函数结果中报告无效列表语法时的问题(Erik Wienhold,Tom Lane)§

这种情况可能导致崩溃,或者发出实际引用前一个 Tcl 错误的误导性上下文信息。

关联记录 (4)
改进避免在 libpq 中使用非线程安全的 strerror()

变更

避免在 libpq 中使用非线程安全的 strerror()(Peter Eisentraut)§

在多线程应用程序中,OpenSSL 返回的某些错误消息可能会出现乱码。

关联记录 (4)
改进确保 pg_restore -l 正确报告依赖的 TOC 条目

变更

确保 pg_restore -l 正确报告依赖的 TOC 条目(Tom Lane)§

如果 -l 与选择性恢复选项(如 -n 或 -N)一起指定,依赖的 TOC 条目(如注释)会从列表中省略,即使实际恢复时会选择它们。

关联记录 (4)
改进在 contrib/postgres_fdw 中,不要将 FETCH FIRST WITH TIES 子句发送到远程服务器

变更

在 contrib/postgres_fdw 中,不要将 FETCH FIRST WITH TIES 子句发送到远程服务器(Japin Li)§

远程服务器可能不实现该子句,或者可能与本地的解释不同,因此不要冒险尝试远程执行。

关联记录 (3)
改进避免与系统提供的 <regex.h> 头文件冲突

变更

避免与系统提供的 <regex.h> 头文件冲突(Thomas Munro)§

这修复了 macOS 版本 15 及更高版本上的编译失败。

关联记录 (4)
问题修复修复对 SP-GiST 索引应用 REINDEX CONCURRENTLY 时无害的断言失败

变更

修复对 SP-GiST 索引应用 REINDEX CONCURRENTLY 时无害的断言失败(Tom Lane)§

关联记录 (4)
如何生成比较结果?

比较依据起始版本之后至目标版本的 PostgreSQL 发布说明。经核实的回补重复项会谨慎合并,保留每条原始说明;相关提交可能涉及独立变化,仍作为不同记录保留。

发布快照: 2026-09-26 · 安全快照: 2026-09-26

内容来自 PostgreSQL 发布说明。交互方式参考 pgversions.com 与 pgversionreport.