文档版本比较
POSTGRESQL · VERSION COMPARE
PostgreSQL 14.7 发布变化
此版本的完整功能、修复与兼容性说明,以及其他版本的关联记录。
包括起始版本之后至目标版本的变化。大版本号表示该分支的首个版本。
从数据库输出识别起始版本
完整发布变化
14.7
2023-02-09
14.7stable支持截止 2026-11-12
安全变化
| CVE / 问题 | 严重程度 | 修复版本 | 所选版本状态 |
|---|---|---|---|
| CVE-2022-41862 libpq 在 GSSAPI 传输加密初始化失败后可能泄漏内存内容 | 14.7 | 已记录修复 |
PostgreSQL 14.7
迁移与兼容性
对于运行 14.X 的用户,不需要执行导出/恢复。
但是,如果是从早于 14.4 的版本升级,请参见第 E.21 节。
安全libpq 在 GSSAPI 传输加密初始化失败后可能泄漏内存内容
变更
libpq 在 GSSAPI 传输加密初始化失败后可能泄漏内存内容(Jacob Champion)§
一个被修改的服务器,或未经身份验证的中间人,可以在建立 GSSAPI(Kerberos)传输加密期间发送一个非零终止的错误消息。 libpq 随后会复制该字符串以及应用程序内存中直到下一个零字节的后续字节到其错误报告中。根据调用应用程序对错误报告的处理方式,这可能导致应用程序内存内容的泄露。由于读取超出内存末尾,还有很小的概率导致崩溃。修复方法是正确地对服务器消息进行零终止处理。(CVE-2022-41862)
问题修复修复在对分区表或继承树执行 UPDATE 时,计算子表中哪些 GENERATED 列需要更新的问题
改进允许 WITH RECURSIVE ... CYCLE CTE 访问其输出列
变更
允许 WITH RECURSIVE ... CYCLE CTE 访问其输出列(Tom Lane)§
从 CTE 内部引用 SET 列会导致 “cache lookup failed for type 0” 错误。
问题修复修复在对外部表执行批量插入时对待处理插入的处理
改进允许在尚未(完全)有效的索引上设置 REPLICA IDENTITY
变更
允许在尚未(完全)有效的索引上设置 REPLICA IDENTITY(Tom Lane)§
当 pg_dump 导出一个标记了 REPLICA IDENTITY 的分区索引时,它生成的命令序列会在分区索引被标记为有效之前应用 REPLICA IDENTITY,导致恢复失败。似乎没有很好的理由禁止按此顺序操作,因此允许这样做。在索引变为有效之前,该标记不会产生任何效果。
问题修复修复在规则中从多行 VALUES 列表执行 INSERT 时对 DEFAULT 标记的处理
变更
修复在规则中从多行 VALUES 列表执行 INSERT 时对 DEFAULT 标记的处理(Dean Rasheed)§
在某些情况下,DEFAULT 标记不会被替换为正确的默认值表达式,导致 “unrecognized node type” 错误。
改进拒绝在 jsonpath 存在性检查中使用未定义的变量
变更
拒绝在 jsonpath 存在性检查中使用未定义的变量(Alexander Korotkov,David G. Johnston)§
虽然 jsonpath 匹配操作符对路径模式中的未定义变量会抛出错误,但存在性操作符却默默地将其视为匹配。
问题修复修复 jsonb 下标操作,使其能够处理经过 TOAST 处理的下标值
变更
修复 jsonb 下标操作,使其能够处理经过 TOAST 处理的下标值(Tom Lane,David G. Johnston)§
使用直接从表中获取的文本值作为 jsonb 下标时很可能会失败。获取操作通常找不到任何匹配的元素。赋值操作可能会使用垃圾键存储值,不过在实际使用中,足够长以导致该问题的键可能很少见。
问题修复修复并行哈希连接中的边界情况数据损坏问题
变更
修复并行哈希连接中的边界情况数据损坏问题(Dmitry Astapov)§
如果正在写入临时文件的大元组的最后一个块恰好是 32760 字节,由于栅栏柱错误会导致数据损坏。查询通常会在稍后以数据损坏的症状而失败。
改进遵循 checkpoint_completion_target 的非默认设置
变更
遵循 checkpoint_completion_target 的非默认设置(Bharath Rupireddy)§
在 checkpoint_completion_target 更改后,内部状态未被更新,可能导致检查点 I/O 执行得比预期更快或更慢,特别是在动态更改该设置时。
问题修复在 recovery_target_xid 模式下记录正确的结束时间戳
变更
在 recovery_target_xid 模式下记录正确的结束时间戳(Tom Lane)§
当基于 recovery_target_xid 设置且 recovery_target_inclusive = off 结束恢复时,我们在 “recovery stopping before ... transaction” 日志消息中打印了一个不正确的时间戳(始终为 2000-01-01)。
改进改进某些缓冲文件读取失败的错误报告
变更
改进某些缓冲文件读取失败的错误报告(Peter Eisentraut)§
正确报告短读取,给出期望的字节数和实际读取的字节数,而不是报告一个不相关的错误代码。大多数地方已经正确处理了此问题,但一些最近编写的复制逻辑没有。
改进在扩展查询协议中,如果我们正在运行管道,避免在 ANALYZE 之后立即提交
变更
在扩展查询协议中,如果我们正在运行管道,避免在 ANALYZE 之后立即提交(Tom Lane)§
如果没有显式的 BEGIN TRANSACTION,ANALYZE 会自行提交,但这在管道化的命令序列中不应该发生。
改进拒绝长度错误的取消请求包
变更
拒绝长度错误的取消请求包(Andrey Borodin)§
即使取消请求的长度字段过小,服务器也会处理该请求。这导致读取超出已分配缓冲区的末尾。理论上这可能导致段错误,但在实际中不太可能发生,因为缓冲区需要非常接近内存末尾才会出现。更可能的结果是关于错误后端 PID 或取消码的虚假日志消息。改为对错误的长度发出报告。
改进在子查询提升中增加递归和循环防护
变更
在子查询提升中增加递归和循环防护(Tom Lane)§
一个精心构造的查询可能导致深度递归和过多的时间用于尝试展平子查询。一个正确的修复对于后移来说过于侵入性,但至少我们可以增加堆栈深度检查和中断检查以允许取消查询。
问题修复修复将 Memoize 节点与按分区连接或参数化嵌套循环结合使用时的规划器问题
问题修复修复按分区连接代码以容忍无法为每个分区生成计划的情况
变更
修复按分区连接代码以容忍无法为每个分区生成计划的情况(Tom Lane)§
这可能导致 “could not devise a query plan for the given query” 错误。
改进限制 get_actual_variable_range 执行的清理工作量
变更
限制 get_actual_variable_range 执行的清理工作量(Simon Riggs)§
在删除大量出现在索引末尾的元组之后立即进行的规划器运行,可能会花费大量工作来设置那些索引条目的 “killed” 位。通过在检查 100 个堆页面后放弃此过程来限制任何一次查询中的工作量。所有清理工作最终仍会完成,但不会出现如此大的性能波动。
问题修复修复 AT TIME ZONE 构造的括号不足的显示问题
改进防止 SQL 函数中工具语句的缓存解析树被覆盖
变更
防止 SQL 函数中工具语句的缓存解析树被覆盖(Tom Lane,Daniel Gustafsson)§
如果一个 SQL 语言函数在单个调用查询中多次执行同一个工具命令,可能会崩溃或报告诸如 “unrecognized node type” 之类的奇怪错误。
关联记录 (1)
改进确保在执行短语匹配时可以取消全文检索查询的执行
变更
确保在执行短语匹配时可以取消全文检索查询的执行(Tom Lane)§
问题修复修复在使用非确定性排序规则对字符串进行 hash 运算时的内存泄漏
变更
修复在使用非确定性排序规则对字符串进行 hash 运算时的内存泄漏(Jeff Davis)§
问题修复修复 DROP DATABASE 与逻辑复制工作进程之间的死锁问题
变更
修复 DROP DATABASE 与逻辑复制工作进程之间的死锁问题(Hou Zhijie)§
此问题是由在工作进程中创建逻辑复制槽时不当选择阻塞中断引起的。在版本 15 中,这可能导致未被检测到的死锁。在版本 14 中,虽然未观察到死锁,但在等待网络 I/O 时阻塞中断仍然是不好的做法。
改进在复制连接尝试失败后清理 libpq 连接对象
变更
在复制连接尝试失败后清理 libpq 连接对象(Andres Freund)§
之前的代码泄漏了连接对象。在后台代码路径中这基本无害,因为调用进程会放弃并退出。但在诸如 CREATE SUBSCRIPTION 等命令中,此类失败会导致少量会话生命周期的内存泄漏。
改进在热备服务器中,减少跟踪主库上已知活跃 XID 的处理开销
变更
在热备服务器中,减少跟踪主库上已知活跃 XID 的处理开销(Simon Riggs,Michail Nikolaev)§
对 KnownAssignedXids 数组清理不够积极可能导致性能下降,特别是在备库上 max_connections 设置较大时。
改进在确定最旧的目录 xmin 时忽略已失效的逻辑复制槽
变更
在确定最旧的目录 xmin 时忽略已失效的逻辑复制槽(Sirisha Chamarthi)§
复制槽即使在因超过 max_slot_wal_keep_size 而变为失效之后,仍可能阻止系统目录中死元组的清理。因此,复制消费者的故障可能导致无限增长的目录膨胀。
改进在逻辑解码中,当检测到事务已崩溃时通知远程节点
变更
在逻辑解码中,当检测到事务已崩溃时通知远程节点(Hou Zhijie)§
在服务器重启后,我们将重新流式传输重启前不久发生的事务的变更。其中一些事务可能从未完成;当我们发现某个事务未完成时,我们在本地丢弃了相关的解码状态,但忽略了通知订阅者。这导致订阅者保留无用的流式文件,直到下次重启。
关联记录 (1)
问题修复修复逻辑解码中使用未初始化内存的问题
变更
修复逻辑解码中使用未初始化内存的问题(Masahiko Sawada)§
在某些情况下,恢复逻辑解码可能会尝试重新使用已释放的 XID 数据,导致不可预测的行为。
改进避免在 WAL 重放 hash 索引页面分裂操作期间出现罕见的 “failed to acquire cleanup lock” 恐慌
变更
避免在 WAL 重放 hash 索引页面分裂操作期间出现罕见的 “failed to acquire cleanup lock” 恐慌(Robert Haas)§
关联记录 (4)
- 相同变化PostgreSQL 15.2 · 避免在 WAL 重放 hash 索引页面分裂操作期间出现罕见的 “failed to acquire cleanup lock” 恐慌
- 相同变化PostgreSQL 13.10 · 避免在 WAL 重放 hash 索引页面分裂操作期间出现罕见的 “failed to acquire cleanup lock” 恐慌
- 相同变化PostgreSQL 12.14 · 避免在 WAL 重放 hash 索引页面分裂操作期间出现罕见的 “failed to acquire cleanup lock” 恐慌
- 相同变化PostgreSQL 11.19 · 避免在 WAL 重放 hash 索引页面分裂操作期间出现罕见的 “failed to acquire cleanup lock” 恐慌
改进在 WAL 重放期间设置堆页面的 all-visible 位时推进页面的 LSN
变更
在 WAL 重放期间设置堆页面的 all-visible 位时推进页面的 LSN(Jeff Davis)§
未能这样做会导致备库上的页面可能与主库不同,并违反了关于 LSN 何时更改的其他预期。就 PostgreSQL 本身而言,这似乎只是一个理论上的隐患,但可能影响第三方工具。
改进防止不安全地使用关系缓存条目的 rd_smgr 指针
变更
防止不安全地使用关系缓存条目的 rd_smgr 指针(Amul Sul)§
移除各种假设 rd_smgr 在一系列操作中始终有效的假定,通过将所有使用包装在一个函数中,在需要时重新计算。这防止了在一系列操作中途发生意外缓存刷新时出现的错误。
问题修复修复 int64_div_fast_to_numeric() 以适用于更广范围的输入
变更
修复 int64_div_fast_to_numeric() 以适用于更广范围的输入(Dean Rasheed)§
该函数对其第二个参数的某些值表现异常。核心 PostgreSQL 中没有此类用法,但这对外部模块来说显然是一个隐患,因此予以修复。
问题修复修复 WaitEventSet 逻辑中的潜在缓冲区溢出问题
变更
修复 WaitEventSet 逻辑中的潜在缓冲区溢出问题(Thomas Munro)§
基于 epoll 和 kqueue 的实现,在其内部缓冲区大小与调用者输出缓冲区大小不同时,可能向内核请求过多的事件。该情况在已发布的 PostgreSQL 版本中尚未出现,但此错误对外部模块和未来的错误修复构成隐患。
改进避免在 32 位构建中访问共享内存时出现名义上的未定义行为
变更
避免在 32 位构建中访问共享内存时出现名义上的未定义行为(Andres Freund)§
clang 的未定义行为检测器对使用对齐不足的指针发出了警告。这在非调试构建中不太可能造成问题,但为了测试目的值得修复。
问题修复修复 BRIN minmax-multi 操作符类中的断言失败
变更
修复 BRIN minmax-multi 操作符类中的断言失败(Tomas Vondra)§
该断言过于严格,因此此错误在非断言构建中是无害的。
改进移除无用的 RESULT-RTE 优化逻辑中的错误断言
变更
移除无用的 RESULT-RTE 优化逻辑中的错误断言(Tom Lane)§
问题修复修复 ACL 检查中缓存查找失败消息的复制粘贴错误
变更
修复 ACL 检查中缓存查找失败消息的复制粘贴错误(Justin Pryzby)§
原则上这些错误应该永远不会触发。但如果触发了,其中一些会报告错误类型的对象。
改进在 pg_dump 中,避免在获取要检查的表的锁之前调用不安全的服务器函数
问题修复修复 psql 的 \sf 和 \ef 命令以处理具有 SQL 标准函数体的 SQL 语言函数
变更
修复 psql 的 \sf 和 \ef 命令以处理具有 SQL 标准函数体的 SQL 语言函数(Tom Lane)§
当函数体使用新式语法时,这些命令错误识别了函数体的起始位置。
问题修复修复 ALTER FUNCTION/PROCEDURE/ROUTINE ... SET SCHEMA 的 Tab 补全
变更
修复 ALTER FUNCTION/PROCEDURE/ROUTINE ... SET SCHEMA 的 Tab 补全(Dean Rasheed)§
关联记录 (4)
- 相同变化PostgreSQL 15.2 · 修复 ALTER FUNCTION/PROCEDURE/ROUTINE ... SET SCHEMA 的 Tab 补全
- 相同变化PostgreSQL 13.10 · 修复 ALTER FUNCTION/PROCEDURE/ROUTINE ... SET SCHEMA 的 Tab 补全
- 相同变化PostgreSQL 12.14 · 修复 ALTER FUNCTION/PROCEDURE/ROUTINE ... SET SCHEMA 的 Tab 补全
- 相同变化PostgreSQL 11.19 · 修复 ALTER FUNCTION/PROCEDURE/ROUTINE ... SET SCHEMA 的 Tab 补全
问题修复修复 contrib/seg 在输入数字超过 127 位时不再崩溃或输出垃圾数据
变更
修复 contrib/seg 在输入数字超过 127 位时不再崩溃或输出垃圾数据(Tom Lane)§
问题修复修复在 Microsoft Visual Studio 2013 上的构建问题
变更
修复在 Microsoft Visual Studio 2013 上的构建问题(Tom Lane)§
之前的补丁假设所有相关平台都有 snprintf(),但 MSVC 2013 尚未完全支持。在该平台上恢复使用 sprintf()。
问题修复修复在使用 Strawberry Perl 时用 MSVC 构建 PL/Perl 的编译失败问题
变更
修复在使用 Strawberry Perl 时用 MSVC 构建 PL/Perl 的编译失败问题(Andrew Dunstan)§
问题修复修复用 MSVC 构建的 PL/Perl 与用 gcc 构建的 Perl 库之间的不匹配问题
变更
修复用 MSVC 构建的 PL/Perl 与用 gcc 构建的 Perl 库之间的不匹配问题(Andrew Dunstan)§
此类组合之前可能导致 “loadable library and perl binaries are mismatched” 错误。
改进抑制来自 Perl 头文件的编译器警告
变更
抑制来自 Perl 头文件的编译器警告(Andres Freund)§
我们首选的编译器选项会对 Perl 头文件最近版本中出现的构造引发警告。在使用 gcc 时,我们可以用 pragma 来抑制这些警告。
问题修复修复 pg_waldump 在不丢弃未使用的 static-inline 函数的编译器上的构建问题
变更
修复 pg_waldump 在不丢弃未使用的 static-inline 函数的编译器上的构建问题(Tom Lane)§
改进将时区数据文件更新为 tzdata 2022g 版本,包含格陵兰和墨西哥的夏令时法规变更,以及加拿大北部、哥伦比亚和新加坡的历史修正。
变更
将时区数据文件更新为 tzdata 2022g 版本,包含格陵兰和墨西哥的夏令时法规变更,以及加拿大北部、哥伦比亚和新加坡的历史修正。(Tom Lane)§
值得注意的是,一个新的时区 America/Ciudad_Juarez 从 America/Ojinaga 中分离出来。
关联记录 (4)
- 相同变化PostgreSQL 15.2 · 将时区数据文件更新为 tzdata 2022g 版本,包含格陵兰和墨西哥的夏令时法规变更,以及加拿大北部、哥伦比亚和新加坡的历史修正。
- 相同变化PostgreSQL 13.10 · 将时区数据文件更新为 tzdata 2022g 版本,包含格陵兰和墨西哥的夏令时法规变更,以及加拿大北部、哥伦比亚和新加坡的历史修正。
- 相同变化PostgreSQL 12.14 · 将时区数据文件更新为 tzdata 2022g 版本,包含格陵兰和墨西哥的夏令时法规变更,以及加拿大北部、哥伦比亚和新加坡的历史修正。
- 相同变化PostgreSQL 11.19 · 将时区数据文件更新到 tzdata 2022g 版,以反映格陵兰和墨西哥的夏令时法规变更,并修正加拿大北部、哥伦比亚和新加坡的历史数据。
没有匹配的变化
尝试其他关键词,或 .
如何生成比较结果?
比较依据起始版本之后至目标版本的 PostgreSQL 发布说明。经核实的回补重复项会谨慎合并,保留每条原始说明;相关提交可能涉及独立变化,仍作为不同记录保留。
发布快照: 2026-09-26 · 安全快照: 2026-09-26
内容来自 PostgreSQL 发布说明。交互方式参考 pgversions.com 与 pgversionreport.