↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

文档版本对比

POSTGRESQL · VERSION COMPARE

PostgreSQL 16.5 的版本变更

本次发布的完整功能、修复与兼容性说明,以及它们在其他版本中的关联记录。

查看该版本全部变更
查看该版本全部变更

从起始版本之后,看到目标版本为止。大版本名称代表该系列首个正式版本。

收录 PostgreSQL 9.0 起的 17 个大版本、352 份发布说明;数据更新于 2026-09-26。

本次发布的全部变更

16.5

2024-11-14

导出 JSON
54项变更功能、修复与改进
1次版本发布按发行版本归档
4个 CVE本版说明中提及的漏洞编号

16.5 受支持版本维护截止 2028-11-09

本版提及的安全记录 4 个 CVE
本版发布说明提及的 CVE,可能包含已有漏洞的后续修复
CVE / 问题严重程度修复版本
CVE-2024-10979

防止受信任的 PL/Perl 代码更改环境变量

8.816.5
CVE-2024-10978

修复 SET SESSION AUTHORIZATION 与 SET ROLE 之间意外的交互

4.216.5
CVE-2024-10976

确保当 RLS 应用于非顶级表引用时,缓存的执行计划被标记为依赖于调用角色

4.216.5
CVE-2024-10977

使 libpq 丢弃在 SSL 或 GSS 协议协商期间收到的错误消息

3.116.5

PostgreSQL 16.5

升级与兼容性说明

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

不过,如果你曾经从一个引用另一分区表的分区表中分离过某个分区,并且之后没有删除该分区,那么你可能需要修复系统目录和/或数据损坏,详见下文第五条变更记录。

此外,如果你从早于 16.3 的版本升级,请参见第 E.13 节。

安全相关确保当 RLS 应用于非顶级表引用时,缓存的执行计划被标记为依赖于调用角色

变更

确保当 RLS 应用于非顶级表引用时,缓存的执行计划被标记为依赖于调用角色(Nathan Bossart)§

如果查询中的 CTE、子查询、子链接、安全调用者视图或强制类型转换投影引用了具有行级安全策略的表,我们忽略了将结果执行计划标记为可能依赖于执行它的角色。这可能导致同一会话中后续的查询执行使用错误的执行计划,然后返回或隐藏本应被隐藏或返回的行。

PostgreSQL 项目感谢 Wolfgang Walther 报告此问题。(CVE-2024-10976)

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

安全相关使 libpq 丢弃在 SSL 或 GSS 协议协商期间收到的错误消息

变更

使 libpq 丢弃在 SSL 或 GSS 协议协商期间收到的错误消息(Jacob Champion)§

在加密协商完成之前收到的错误消息可能是由中间人注入的,而不是真正的服务器输出。报告该消息会带来各种安全隐患;例如,该消息可能伪造查询结果,粗心的用户可能会误以为是正确的输出。最好的方案似乎是丢弃这类数据,仅依赖 libpq 自身对连接失败的报告。

PostgreSQL 项目感谢 Jacob Champion 报告此问题。(CVE-2024-10977)

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

安全相关修复 SET SESSION AUTHORIZATION 与 SET ROLE 之间意外的交互

变更

修复 SET SESSION AUTHORIZATION 与 SET ROLE 之间意外的交互(Tom Lane)§ §

SQL 标准要求 SET SESSION AUTHORIZATION 具有执行 SET ROLE NONE 的副作用。我们对此的实现有缺陷,导致两个设置之间产生了超出预期的交互。值得注意的是,回滚一个执行了 SET SESSION AUTHORIZATION 的事务会将 ROLE 恢复为 NONE,即使之前并非如此,因此有效用户 ID 现在可能与事务之前不同。在函数 SET 子句中临时设置 session_authorization 也有类似的效果。一个相关的错误是,如果并行工作进程检查 current_setting('role'),它会看到 none,即使它应该看到其他值。

PostgreSQL 项目感谢 Tom Lane 报告此问题。(CVE-2024-10978)

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

安全相关防止受信任的 PL/Perl 代码更改环境变量

变更

防止受信任的 PL/Perl 代码更改环境变量(Andrew Dunstan,Noah Misch)§ § § § §

操纵进程环境变量(如 PATH)的能力会给攻击者提供执行任意代码的机会。因此,“受信任的” PL 不应提供这样的能力。为修复 plperl,将 %ENV 替换为一个绑定的 hash,该 hash 会拒绝任何修改尝试并发出警告。不受信任的 plperlu 保留更改环境的能力。

PostgreSQL 项目感谢 Coby Abrams 报告此问题。(CVE-2024-10979)

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复在附加或分离表分区时外键约束的目录状态更新

变更

修复在附加或分离表分区时外键约束的目录状态更新(Jehan-Guillaume de Rorthais,Tender Wang,Álvaro Herrera)§ §

如果被引用表是分区表,则独立的引用表与作为分区的引用表需要不同的目录条目。ATTACH/DETACH PARTITION 命令未能正确执行此转换。特别是在 DETACH 之后,现在独立的表将缺少外键强制触发器,这可能导致该表后来包含违反外键约束的行。随后的重新 ATTACH 也可能失败并产生令人意外的错误。

修复方法是对现在独立的表的每个有问题的约束执行 ALTER TABLE DROP CONSTRAINT,然后重新添加该约束。如果重新添加约束失败,说明已经有错误数据混入。需要手动恢复引用表和被引用表之间的一致性,然后重新添加约束。

以下查询可用于识别损坏的约束,并构造重建它们所需的命令:

SELECT conrelid::pg_catalog.regclass AS "constrained table",
       conname AS constraint,
       confrelid::pg_catalog.regclass AS "references",
       pg_catalog.format('ALTER TABLE %s DROP CONSTRAINT %I;',
                         conrelid::pg_catalog.regclass, conname) AS "drop",
       pg_catalog.format('ALTER TABLE %s ADD CONSTRAINT %I %s;',
                         conrelid::pg_catalog.regclass, conname,
                         pg_catalog.pg_get_constraintdef(oid)) AS "add"
FROM pg_catalog.pg_constraint c
WHERE contype = 'f' AND conparentid = 0 AND
   (SELECT count(*) FROM pg_catalog.pg_constraint c2
    WHERE c2.conparentid = c.oid) <>
   ((SELECT count(*) FROM pg_catalog.pg_inherits i
    WHERE (i.inhparent = c.conrelid OR i.inhparent = c.confrelid) AND
      EXISTS (SELECT 1 FROM pg_catalog.pg_partitioned_table
              WHERE partrelid = i.inhparent)) +
    CASE WHEN pg_catalog.pg_partition_root(conrelid) = confrelid THEN
              (SELECT count(*) FROM pg_catalog.pg_partition_tree(confrelid)
                WHERE level = 1)
         ELSE 0 END);

由于一个或多个 ADD CONSTRAINT 步骤可能会失败,应将查询输出保存到文件中,然后尝试执行每个步骤。

关联记录(4)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复避免在对分区表的查询与 DETACH CONCURRENTLY 及随后立即删除分区并发执行时,可能发生的崩溃和 “could not open relation” 错误

变更

避免在对分区表的查询与 DETACH CONCURRENTLY 及随后立即删除分区并发执行时,可能发生的崩溃和 “could not open relation” 错误(Álvaro Herrera,Kuntal Gosh)§ §

关联记录(2)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进如果要附加的表具有引用该分区表的外键,则禁止 ALTER TABLE ATTACH PARTITION

变更

如果要附加的表具有引用该分区表的外键,则禁止 ALTER TABLE ATTACH PARTITION(Álvaro Herrera)§ §

这种配置不被支持,其他创建方式已经会失败。

关联记录(4)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进当查询中键列的排序规则与分区键的排序规则不匹配时,不使用分区级连接或分组

变更

当查询中键列的排序规则与分区键的排序规则不匹配时,不使用分区级连接或分组(Jian He,Webbo Han)§ §

这样的执行计划可能产生不正确的结果。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复当 UNION ALL 成员查询的输出需要排序,且排序列为表达式时,可能出现的 “could not find pathkey item to sort” 错误

变更

修复当 UNION ALL 成员查询的输出需要排序,且排序列为表达式时,可能出现的 “could not find pathkey item to sort” 错误(Andrei Lepikhov,Tom Lane)§

关联记录(4)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复涉及将外连接下的子查询展平后又将外连接简化为普通连接时的性能回退

变更

修复涉及将外连接下的子查询展平后又将外连接简化为普通连接时的性能回退(Tom Lane)§

v16 未能像之前版本那样良好地优化某些查询,原因是查询提升逻辑的过度简化。

其他改进允许取消大型 hash 索引构建第二阶段的操作

变更

允许取消大型 hash 索引构建第二阶段的操作(Pavel Borisov)§

关联记录(4)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复 COPY (query) TO ... 中的断言失败或令人困惑的错误消息,当 query 被 DO INSTEAD NOTIFY 规则重写时

变更

修复 COPY (query) TO ... 中的断言失败或令人困惑的错误消息,当 query 被 DO INSTEAD NOTIFY 规则重写时(Tender Wang,Tom Lane)§

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复当 json_objectagg() 调用包含 volatile 函数时的服务器崩溃

变更

修复当 json_objectagg() 调用包含 volatile 函数时的服务器崩溃(Amit Langote)§

关联记录(1)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复 JSON 对象构造函数中的键唯一性检查

变更

修复 JSON 对象构造函数中的键唯一性检查(Junwang Zhao,Tomas Vondra)§

在构建大于一千字节的对象时,可能会接受包含重复对象键的无效输入,或者错误地报告存在重复键。

BUG 修复修复并行哈希连接中倾斜数据的检测

变更

修复并行哈希连接中倾斜数据的检测(Thomas Munro)§

在对哈希连接的内侧进行重新分区(因为某个分区累积了过多元组)之后,我们会检查该分区的所有元组是否都进入了同一个子分区,这表明它们都具有相同的 hash 值,进一步重新分区无法改善情况。此检查在某些情况下出现故障,允许重复进行无效的重新分区,最终导致资源耗尽错误。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进禁止包含非 ASCII 字符的区域设置名称

变更

禁止包含非 ASCII 字符的区域设置名称(Thomas Munro)§

这仅在 Windows 上是一个问题,因为其他平台不使用此类区域设置名称。它们存在问题是因为完全不清楚此类名称用什么编码表示(因为区域设置本身定义了要使用的编码)。在最近的 PostgreSQL 版本中,由于对此的混淆,可能会在 Windows 运行时库中发生中止。

遇到新错误消息的用户应该使用 Windows Locale Builder 创建一个具有纯 ASCII 名称的重复区域设置,或者考虑使用符合 BCP 47 的区域设置名称,如 tr-TR。

关联记录(1)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复提交可串行化事务时的竞态条件

变更

修复提交可串行化事务时的竞态条件(Heikki Linnakangas)§

对最近提交的事务的错误处理可能导致断言失败或 “could not access status of transaction” 错误。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复 COMMIT PREPARED 中导致产生孤立 2PC 文件的竞态条件

变更

修复 COMMIT PREPARED 中导致产生孤立 2PC 文件的竞态条件(wuchengwen)§

并发的 PREPARE TRANSACTION 可能导致 COMMIT PREPARED 不删除已完成事务的磁盘上两阶段状态文件。虽然没有立即的不良影响,但随后的崩溃恢复可能因 “could not access status of transaction” 而失败,需要手动删除孤立文件才能恢复服务。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进避免在 VACUUM FULL 期间跳过无效 toast 索引后发生无效内存访问

变更

避免在 VACUUM FULL 期间跳过无效 toast 索引后发生无效内存访问(Tender Wang)§

在此代码路径中,跟踪尚待重建索引的列表未被正确更新,可能导致后续的断言失败或崩溃。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复“就地”目录更新可能丢失的问题

变更

修复“就地”目录更新可能丢失的问题(Noah Misch)§ § § § § § §

普通行更新会写入行的新版本以保留事务的回滚能力。然而,某些系统目录更新是有意设计为非事务性的,并通过对行的就地更新来完成。这些补丁修复了可能导致就地更新效果丢失的竞态条件。例如,可能会忘记已将 pg_class.relhasindex 设置为 true,从而阻止新索引的更新,进而导致索引损坏。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进在恢复结束时重置系统目录缓存

变更

在恢复结束时重置系统目录缓存(Noah Misch)§

这可以防止因使用系统目录缓存中的陈旧数据,而导致原地系统目录更新丢失的情况。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进避免在持有中断抑制时使用并行查询

变更

避免在持有中断抑制时使用并行查询(Francesco Degrassi,Noah Misch,Tom Lane)§ §

这种情况在正常情况下不会发生,但可以通过测试场景达到,例如使用 SQL 语言函数作为 B-树支持函数(这对于生产使用来说太慢了)。如果确实发生,将导致无限期等待。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进在处理 Bind 和 Execute 协议消息开始时,报告用于统计目的的活跃查询 ID

变更

在处理 Bind 和 Execute 协议消息开始时,报告用于统计目的的活跃查询 ID(Sami Imseih)§

这使得扩展查询协议中更多的工作可以归属于正确的查询。

关联记录(2)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进防止在过度深层嵌套的 XML 输入中 libxml2 的栈溢出(Tom Lane,致谢 Nick Wellnhofer)

变更

防止在过度深层嵌套的 XML 输入中 libxml2 的栈溢出(Tom Lane,致谢 Nick Wellnhofer)§

使用 xmlXPathCtxtCompile() 而非 xmlXPathCompile(),因为后者在 2.13.4 之前的 libxml2 版本中未能保护自身免受递归到栈溢出的影响。

关联记录(4)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复 XMLSERIALIZE(... INDENT) 结果中的一些空白问题

变更

修复 XMLSERIALIZE(... INDENT) 结果中的一些空白问题(Jim Jones)§

修复对由空白分隔的节点未能缩进的问题,并确保不会添加尾随换行符。

其他改进不要忽略正在处理带有谓词或表达式的索引的并发 REINDEX CONCURRENTLY

变更

不要忽略正在处理带有谓词或表达式的索引的并发 REINDEX CONCURRENTLY(Michail Nikolaev)§

通常,REINDEX CONCURRENTLY 不需要等待其他表上的其他 REINDEX CONCURRENTLY 操作。但是,如果其他 REINDEX CONCURRENTLY 正在处理带有谓词或表达式的索引,则不应用此优化,因为这些表达式可能包含访问其他表的用户定义代码。粗心的编码造成了一个竞态条件,使得该规则未被统一应用,可能导致不一致的行为。

关联记录(2)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复存在名称冲突时 ORDER BY 列表的错误反解析

变更

修复存在名称冲突时 ORDER BY 列表的错误反解析(Tom Lane)§

如果 SELECT 中的 ORDER BY 项是一个裸标识符,解析器首先将其作为 SELECT 的输出列名查找,以兼容 SQL92。但是,ruleutils.c 期望 SQL99 的解释,即此类名称是输入列名。因此在(相当不建议的)情况下,当其他列在 SELECT 输出列表中被重命名以匹配 ORDER BY 中使用的输入列名时,可能会产生视图的不正确显示。通过在导出的视图文本中对此类名称添加表限定来修复。

BUG 修复修复 EXPLAIN 中的 “failed to find plan for subquery/CTE” 错误

变更

修复 EXPLAIN 中的 “failed to find plan for subquery/CTE” 错误(Richard Guo,Tom Lane)§ §

当试图打印子查询的 RECORD 类型输出的字段引用,而该子查询已从执行计划中完全优化掉时(至少在具有常量为假的 WHERE 条件时可能发生),就会出现这种情况。执行计划中不再有任何内容可以标识原始字段名,因此回退到对第 N 个记录列打印 fN。(如果记录输出来自 ROW() 构造器,这实际上也是正确的做法。)

关联记录(4)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进在更改生成列的类型时,禁止使用 USING 子句

变更

在更改生成列的类型时,禁止使用 USING 子句(Peter Eisentraut)§

生成列已经有一个指定列内容的表达式,因此包含 USING 没有意义。

关联记录(4)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进在 pg_cursors 视图中忽略尚未定义的 Portal

变更

在 pg_cursors 视图中忽略尚未定义的 Portal(Tom Lane)§

用户定义的检查该视图的代码可能在新游标正在设置时被调用,如果发生这种情况,将导致空指针解引用。通过将该视图定义为排除未完全设置的游标来避免此问题。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复 32 位机器上 pg_stat_io 视图的不正确输出

变更

修复 32 位机器上 pg_stat_io 视图的不正确输出(Bertrand Drouvot)§

stats_reset 时间戳列在此类硬件上包含垃圾值。

其他改进防止 “trailing junk after numeric literal” 错误消息的编码错误

变更

防止 “trailing junk after numeric literal” 错误消息的编码错误(Karina Litskevich)§

我们不允许标识符直接出现在数字文本之后(两者之间必须有空白)。如果一个多字节字符紧跟在数字文本之后,关于它的语法错误消息只包含该字符的第一个字节,导致向客户端报告和 postmaster 日志文件中的编码问题。

关联记录(1)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进避免在解码涉及插入列默认值的事务时出现 “unexpected table_index_fetch_tuple call during logical decoding” 错误

变更

避免在解码涉及插入列默认值的事务时出现 “unexpected table_index_fetch_tuple call during logical decoding” 错误(Takeshi Ideriha,Hou Zhijie)§ §

关联记录(3)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进减少逻辑解码的内存消耗

变更

减少逻辑解码的内存消耗(Masahiko Sawada)§

使用较小的默认块大小来存储逻辑复制期间接收的元组数据。这减少了内存浪费,据报告在处理长时间运行的事务时内存浪费会很严重,甚至导致内存不足错误。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进在逻辑复制应用工作进程中,确保在错误或应用工作进程关闭期间不推进源进度

变更

在逻辑复制应用工作进程中,确保在错误或应用工作进程关闭期间不推进源进度(Hayato Kuroda,Shveta Malik)§

这可以避免事务丢失的可能性,因为一旦源进度点被推进,源服务器就不会再次发送该数据。

其他改进重新禁用无状态(TLSv1.2)会话票证的发送

变更

重新禁用无状态(TLSv1.2)会话票证的发送(Daniel Gustafsson)§

之前为防止发送有状态(TLSv1.3)会话票证所做的更改,意外地重新启用了无状态会话票证的发送。因此,虽然我们打算防止客户端认为支持 TLS 会话恢复,但某些客户端仍然这样认为了。

关联记录(4)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进避免在删除具有大量 ACL(权限)条目的数据库时出现 “wrong tuple length” 错误

变更

避免在删除具有大量 ACL(权限)条目的数据库时出现 “wrong tuple length” 错误(Ayush Tiwari)§ §

关联记录(4)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进允许在并行工作进程中调整 session_authorization 和 role 设置

变更

允许在并行工作进程中调整 session_authorization 和 role 设置(Tom Lane)§

我们的代码打算允许可修改的服务器设置通过函数 SET 子句来设置,但在并行工作进程中不允许其他方式。这两个设置的 SET 子句却失败了。

关联记录(4)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复当 CALL 位于 PL/pgSQL 的 EXCEPTION 块中时,从 CALL 语句参数列表中调用的稳定函数的行为

变更

修复当 CALL 位于 PL/pgSQL 的 EXCEPTION 块中时,从 CALL 语句参数列表中调用的稳定函数的行为(Tom Lane)§

与我们之前季度发布中的类似修复一样,这种情况允许此类函数被传递错误的快照,导致它们看到自外部事务开始以来修改的行的过时值。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复 PL/pgSQL 的 CALL 中边缘情况下的 “cache lookup failed for function” 错误

变更

修复 PL/pgSQL 的 CALL 中边缘情况下的 “cache lookup failed for function” 错误(Tom Lane)§

关联记录(2)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复我们的备用(非 OpenSSL)MD5 实现在大端硬件上的线程安全问题

变更

修复我们的备用(非 OpenSSL)MD5 实现在大端硬件上的线程安全问题(Heikki Linnakangas)§

线程安全目前在服务器中不是问题,但对于 libpq 来说是个问题。

关联记录(2)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进以与其他整数值选项相同的方式解析 libpq 的 keepalives 连接选项

变更

以与其他整数值选项相同的方式解析 libpq 的 keepalives 连接选项(Yuto Sasaki)§

此处使用的代码拒绝选项值中的尾部空白,与其他情况不同。这在 ecpg 的使用中被证明是有问题的。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进避免在 ecpglib 中使用 pnstrdup()

变更

避免在 ecpglib 中使用 pnstrdup()(Jacob Champion)§

该函数在内存不足时会调用 exit(),这在库中是不可取的。调用代码已经正确地处理了分配失败。

关联记录(3)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复 ecpglib 中解析不正确日期时间输入时的越界读取

变更

修复 ecpglib 中解析不正确日期时间输入时的越界读取(Bruce Momjian,Pavel Nekrasov)§

有可能试图读取常量数组起始位置之前的位置。不过实际影响似乎很小。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复 psql 中重复使用 \bind 时的内存泄漏

变更

修复 psql 中重复使用 \bind 时的内存泄漏(Michael Paquier)§

BUG 修复避免在 psql 的 \watch 命令中指定小于 1ms 的间隔时挂起

变更

避免在 psql 的 \watch 命令中指定小于 1ms 的间隔时挂起(Andrey Borodin,Michael Paquier)§

改为将其视为零间隔(执行之间不等待)。

关联记录(1)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复 pg_dump 对持久性与其所属表不同的标识序列的处理

变更

修复 pg_dump 对持久性与其所属表不同的标识序列的处理(Tom Lane)§

从 v15 开始,可以将标识序列设置为 LOGGED,而其所属表为 UNLOGGED,反之亦然。但是,pg_dump 用于重建这种情况的方法在二进制升级模式下失败,导致当存在此类序列时 pg_upgrade 失败。通过为 ADD/ALTER COLUMN GENERATED AS IDENTITY 引入新选项来修复,允许在创建时正确设置序列的持久性。请注意,这意味着从包含此类序列的数据库导出的转储只能加载到此小版本或更新版本的服务器中。

关联记录(1)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进在 pg_rewind 的调试输出中包含源时间线历史

变更

在 pg_rewind 的调试输出中包含源时间线历史(Heikki Linnakangas)§

这本来就是设计意图,但由于编码错误,源历史总是打印为空。

关联记录(4)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进避免尝试在 vacuumdb 和并行 reindexdb 中重新索引临时表和索引

变更

避免尝试在 vacuumdb 和并行 reindexdb 中重新索引临时表和索引(VaibhaveS,Michael Paquier,Fujii Masao,Nathan Bossart)§ § §

重新索引其他会话的临时表是不可能的,但在某些代码路径中缺少跳过它们的检查,导致了不必要的失败。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进允许在 contrib/pageinspect 和 contrib/pgstattuple 的相关函数中检查序列关系

变更

允许在 contrib/pageinspect 和 contrib/pgstattuple 的相关函数中检查序列关系(Nathan Bossart,Ayush Vatsa)§ §

过去这是允许的,但在引入表的非默认访问方法时被破坏了。

关联记录(4)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复 ARM64 平台上不正确的 LLVM 生成代码

变更

修复 ARM64 平台上不正确的 LLVM 生成代码(Thomas Munro,Anthonin Bonnefoy)§

在 ARM 平台上使用 JIT 编译时,生成的代码无法支持超过 32 位的重定位距离,使得在大内存系统上不巧的代码放置可能导致服务器崩溃。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复一些假设进程启动时间(表示为 time_t)能够放入 long 值的地方

变更

修复一些假设进程启动时间(表示为 time_t)能够放入 long 值的地方(Max Johnson,Nathan Bossart)§

在 long 为 32 位的平台上(尤其是 Windows),此代码将在 2038 年后失败。大多数失败看起来只是外观问题,但值得注意的是 pg_ctl start 会挂起。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复在 Windows 上使用 Strawberry Perl 构建的问题

变更

修复在 Windows 上使用 Strawberry Perl 构建的问题(Andrew Dunstan)§

关联记录(4)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进将时区数据文件更新为 tzdata 2024b 版本

变更

将时区数据文件更新为 tzdata 2024b 版本(Tom Lane)§ §

此 tzdata 版本将旧的 System-V 兼容性区域名称更改为与对应地理区域重复;例如 PST8PDT 现在是 America/Los_Angeles 的别名。主要可见后果是,对于标准化时区引入之前的时间戳,该区域被认为代表命名位置的本地平均太阳时。例如,在 PST8PDT 中,timestamptz 输入如 1801-01-01 00:00 之前会被渲染为 1801-01-01 00:00:00-08,但现在会被渲染为 1801-01-01 00:00:00-07:52:58。

另外,包含墨西哥、蒙古和葡萄牙的历史修正。值得注意的是,Asia/Choibalsan 现在是 Asia/Ulaanbaatar 的别名而非独立区域,主要是因为这些区域之间的差异被发现是基于不可靠的数据。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

这份对比如何生成?

对比以 PostgreSQL 发行说明为依据,汇总起始版本之后、目标版本及之前的变更,支持同一大版本内的小版本更新,以及跨大版本升级。跨大版本时,旧分支的维护记录只纳入到下一大版本首次发布之日,所有记录均不晚于目标版本的发布日期。大版本名称(如 18)指首个正式版本(18.0);测试版与开发快照会单独标注。

条目正文来自本站中文手册,版本清单、条目覆盖与提交依据逐一核对上游英文原文。每条变更保留完整说明与原文链接;分类用于辅助浏览,具体影响、适用条件与升级操作请阅读条目正文和各版本的升级说明。

同一修复可能回补到多个版本分支。对比会保守合并可确认相同的条目,并保留各分支完整说明;已知由起始版本包含的修复会排除。一条说明包含多个独立修复时,只有全部已包含才排除。大版本新功能不因与旧版补丁存在提交关联而合并,不能确认相同的条目继续保留。这是发行说明的累计差异,不能覆盖二进制程序之间的每一处代码变化。

CVE 独立依据 PostgreSQL 官方安全公告与漏洞记录计算:起始版本受影响、目标版本已修复或不受影响的漏洞才计入,按编号去重。目标版本仍受影响的漏洞另行提示;安全变更条数与 CVE 数量分别统计。

交互参考 pgversions.com 与 pgversionreport,内容来自 PostgreSQL 发行说明。更多历史资料见发行说明归档。