pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
文档版本对比
POSTGRESQL · VERSION COMPARE
本次发布的完整功能、修复与兼容性说明,以及它们在其他版本中的关联记录。
从起始版本之后,看到目标版本为止。大版本名称代表该系列首个正式版本。
收录 PostgreSQL 9.0 起的 17 个大版本、352 份发布说明;数据更新于 2026-09-26。
本次发布的全部变更
2022-05-12
14.3 受支持版本维护截止 2026-11-12
| CVE / 问题 | 严重程度 | 修复版本 |
|---|---|---|
| CVE-2022-1552 将更多操作限制在“安全受限操作”沙箱内 | 8.8 | 14.3 |
对于运行 14.X 的用户,不需要执行导出/恢复。
但是,如果存在任何 ltree 类型列上的 GiST 索引(由 contrib/ltree 扩展提供),建议在更新后重建这些索引。请参见下面的第二个变更日志条目。
此外,如果是从早于 14.2 的版本升级,请参见第 E.23 节。
变更
将更多操作限制在“安全受限操作”沙箱内(Sergey Shinderuk,Noah Misch)§ §
自动清理、CLUSTER、CREATE INDEX、REINDEX、REFRESH MATERIALIZED VIEW 和 pg_amcheck 激活“安全受限操作”保护机制的时间过晚,甚至在某些代码路径中根本没有激活。在数据库中拥有创建非临时对象权限的用户可以定义一个对象,当自动清理下次处理该对象时,或者当某个超级用户对其运行上述受影响的命令时,该对象会以超级用户权限执行任意 SQL 代码。
PostgreSQL 项目感谢 Alexander Lakhin 报告此问题。(CVE-2022-1552)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 gist_ltree_ops 索引的默认签名长度(Tomas Vondra,Alexander Korotkov)§
在升级该操作符类以支持操作符类参数的过程中,ltree 列上 GiST 索引的默认签名长度(hash 大小)被意外更改了。如果在未先将 ltree 扩展升级到版本 1.2 的情况下对此类索引执行了任何操作,则这些操作假定签名长度为 28 字节,而非预期的 8 字节。这意味着此类索引很可能已经损坏。为了安全起见,我们建议在安装此更新后重建所有 ltree 列上的 GiST 索引。(注意,ltree[] 列上的 GiST 索引,即 ltree 数组,不受影响。)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
停止将查询提供的列别名用于引用普通表的整行变量的列(Tom Lane)§
整行变量(例如在 SELECT 列表顶层以外的上下文中的 tbl.*)产生的元组中的列名,现在始终为关联的命名复合类型的列名(如果有的话)。之前我们曾尝试使其跟踪已应用于该变量所引用的 FROM 条目的任何列别名。但这在语义上是有问题的,因为这样变量的输出实际上根本不是它声称的复合类型。之前处理这种不一致性的尝试产生了糟糕的结果,甚至包括在磁盘上存储不可读的数据,因此放弃了整个想法。
在需要重新标记这些列的情况下,一种变通方法是引入一个额外的子 SELECT 层级,使整行变量引用子 SELECT 的输出而非普通表。这样变量一开始就是 record 类型,就不存在这个问题了。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复从间隔值中提取 epoch 值时的不正确舍入(Peter Eisentraut)§
新的基于 numeric 的 EXTRACT() 代码未能产生与旧的基于 float 的代码等效的结果,原因是意外地将 DAYS_PER_YEAR 值截断为整数。
变更
防御 pg_stat_get_replication_slot(NULL)(Andres Freund)§
这个函数在系统目录数据中应该标记为 strict,但在 v14 中并没有,因此改为添加运行时检查。
变更
修复 table_to_xmlschema() 及相关函数中 timestamptz 和 timetz 类型的不正确输出(Renan Soares Lopes)§
这些类型的 xmlschema 输出包含了格式错误的正则表达式。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免解析器在处理零列的 VALUES 子句时发生核心转储(Tom Lane)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复当 Result 计划节点直接出现在 Append 节点下方时的规划器失败(Etsuro Fujita)§
最近添加的用于支持异步远程查询的代码未能处理这种情况,导致崩溃或关于无法识别节点类型的错误。
变更
修复当查询使用 SEARCH 或 CYCLE 特性且包含重复 CTE 名称时的规划器失败(Tom Lane,Kyotaro Horiguchi)§
当递归 WITH 查询的名称在其内部被重复使用时,规划器可能崩溃或报告奇怪的错误,例如 “could not find attribute 2 in subquery targetlist”。
变更
修复引用外层查询级别的 GROUPING() 构造的规划器错误(Richard Guo,Tom Lane)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复具有可返回列和不可返回列的索引上的仅索引扫描计划生成(Tom Lane)§
之前的代码会尝试读取不可返回列以及可返回列。这基本上是无害的,因为它实际上并没有对错误的值做任何处理,但它违反了最近添加的拒绝此类计划的错误检查。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免在 EvalPlanQual 期间尝试锁定过时元组时访问不再被固定的共享缓冲区(Tom Lane)§
代码会在释放其 pin 之后再访问该缓冲区几次。理论上,另一个进程可能在 pin 被释放后立即回收该缓冲区(或者更可能是尝试对其空闲空间进行碎片整理),这很可能导致无法找到元组的较新版本。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复正在执行重新排序的 IndexScan 节点中的查询生命周期内存泄漏(Aliaksandr Kalenik)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 ALTER FUNCTION 使其支持在同一命令中同时更改函数的并行属性及其 SET 变量列表(Tom Lane)§
如果同一命令还更新了函数的 SET 子句,则并行属性的更改会丢失。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
收紧约束“拥有的”索引的查找(Tom Lane,Japin Li)§
某些代码路径将外键约束所依赖的索引误认为唯一约束或主键约束所拥有的索引,导致在对具有外键约束的表执行某些 ALTER TABLE 操作时出现奇怪的错误。
变更
修复尝试修改表的系统列时产生的虚假错误(Tom Lane)§
系统应该告诉你不能这样做,但有时它会报告 “no owned sequence found”。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复使用前导键为表达式的索引进行 CLUSTER 时表行的错误排序(Peter Geoghegan,Thomas Munro)§
表会使用正确的数据重建,但其顺序与索引顺序关系不大。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
防止在排序 GiST 索引构建后不久发生系统崩溃时的数据丢失(Heikki Linnakangas)§
使用排序方式构建 GiST 索引的代码路径在完成时忽略了对文件进行 fsync。如果操作系统在此后不久崩溃,这可能导致索引损坏。
变更
修复删除分区索引时可能出现的死锁风险(Jimmy Yih,Gaurab Dey,Tom Lane)§
确保以标准顺序(先父后子,先表后索引)获取所需的表锁和索引锁。之前 DROP INDEX 的代码处理方式不同,因此可能与按标准顺序获取这些锁的并发查询发生死锁。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 DROP TABLESPACE 与检查点之间的竞态条件(Nathan Bossart)§
由 DROP TABLESPACE 强制执行的检查点有时无法从表空间目录中删除所有失效文件,导致虚假的 “tablespace is not empty” 错误。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复与检查点重叠的 TRUNCATE 命令之后崩溃恢复中可能出现的问题(Kyotaro Horiguchi,Heikki Linnakangas,Robert Haas)§ §
TRUNCATE 必须确保在允许检查点完成之前,表的磁盘文件已被截断。否则,从该检查点开始的重放可能会在本应已移除的页面中发现意外数据,从而可能导致重放失败。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复临时对象清理期间不安全的 toast 数据访问(Andres Freund)§
服务器进程退出期间的临时对象删除可能会失败并显示 “FATAL: cannot fetch toast data without an active snapshot”。这通常是无害的,因为下次使用该临时模式时会成功清理。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
重新允许下划线作为自定义参数名的第一个字符(Japin Li)§
这种名称在 v14 中被无意中禁止了。
变更
为 compute_query_id 参数增加 regress 选项(Michael Paquier)§
这旨在方便测试,允许计算查询 ID 但不在 EXPLAIN 输出中显示。
变更
改进 RegisterSyncRequest 中的等待逻辑(Thomas Munro)§
如果检查点进程同步请求队列空间不足(这在实际系统中很少见,但在使用非常小的缓冲池进行测试时很常见),我们会等待其排空。在等待期间,我们应该将其报告为等待事件以便用户了解情况,并且还应该监视 postmaster 是否已终止,否则如果检查点进程已经退出,循环可能永远不会终止。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复当存在缺失的 WAL 续接记录时,备库提升期间出现的 “PANIC: xlog flush request is not satisfied” 失败(Sami Imseih)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复通过逻辑复制发布变更时可能错误识别正确祖先关系的问题(Tomas Vondra,Hou zj,Amit Kapila)§
如果启用了 publish_via_partition_root,并且有多个发布命名了当前被修改关系的不同祖先,则可能选择了错误的祖先来报告变更。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
确保逻辑复制应用工作进程即使在达到 max_sync_workers_per_subscription 限制时也能重启(Amit Kapila)§
限制检查的错误编码导致重启的工作进程立即退出,使得工作进程数量少于应有的数量。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在更新的 WAL 日志中包含未更改的副本标识键列(如果它们以行外方式存储)(Dilip Kumar,Amit Kapila)§
否则订阅者无法看到这些值,并且将无法复制该更新。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
正确处理不支持在 ps(1) 中修改服务器进程显示的平台(Andrew Dunstan)§
这样的平台很少(唯一受支持的是 Cygwin),所以我们未能注意到重构引入了潜在的内存覆盖问题。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
使服务器在面对错过的定时器中断时更加健壮(Michael Harris,Tom Lane)§
v14 中添加的一项优化意味着,如果服务器进程以某种方式错过了定时器中断,它将永远不会再向内核请求新的定时器中断,从而在该会话的剩余时间内破坏超时检测。这似乎过于脆弱,因此增加了一个恢复路径。
变更
禁止在 PL/Perl 函数编译期间执行 SPI 函数(Tom Lane)§
可以让 Perl 在 PL/Perl 函数编译期间执行用户定义的代码。但是,这类代码不应该尝试通过 SPI 调用 SQL 操作。那样做会导致崩溃,即使不崩溃也是一个安全隐患,因为我们确实不希望在函数验证期间执行代码。增加了一个检查以给出更友好的错误消息。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
使 libpq 接受 root 拥有的 SSL 私钥文件(David Steele)§ §
此变更使 libpq 对 SSL 密钥文件的安全所有权和权限规则与服务器自 9.6 版本以来使用的规则同步。即,在当前规则的基础上,还允许密钥文件由 root 拥有且权限为 rw-r----- 或更严格的情况。这对于密钥文件的系统级管理很有帮助。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 libpq 的 PQisBusy() 函数在连接失败后的行为(Tom Lane)§
如果检测到写入失败,PQisBusy() 总是返回 true,这是不正确的:我们希望输入处理继续正常进行,直到读取完服务器可用的所有内容。此错误的实际影响是,使用 libpq 异步查询 API 的应用程序通常只有在 PQconsumeInput() 返回硬失败时才能检测到连接丢失。通过此修复,连接丢失通常将通过错误 PGresult 对象报告,这对大多数应用程序来说是更清晰的行为。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
使 pg_ctl 在等待停止/重启/提升操作时重新检查 postmaster 是否仍然存活(Tom Lane)§
pg_ctl 会在发送停止或提升信号时作为副作用验证 postmaster 是否存活,但之后它只是简单地等待磁盘上的状态变化。如果 postmaster 非正常终止且未删除其 PID 文件或更新控制文件, pg_ctl 将一直等到超时。现在改为每隔一段时间重新检查 postmaster 进程是否仍然存在。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 pg_waldump 中的错误处理(Kyotaro Horiguchi,Andres Freund)§ §
在尝试读取 WAL 文件以确定 WAL 段大小时, pg_waldump 会为文件过短的情况报告不正确的错误。此外,此错误消息及相关错误消息中报告的文件名可能是垃圾值。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
确保 contrib/pageinspect 函数能够处理全零页面(Michael Paquier)§
这是一个合理的边界情况,但该模块大多未做准备。安排返回 null 或不返回行,视情况而定;这比抛出错误更有用。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在 contrib/pageinspect 中,增加对不正确页面“特殊空间”内容的防御,收紧对正确页面大小的检查,并增加一些缺失的索引类型正确性检查(Michael Paquier,Justin Pryzby,Julien Rouhaud)§ § §
这些变更减少了该模块在处理错误数据时崩溃的可能性。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在 contrib/postgres_fdw 中,当外部表上存在 BEFORE INSERT ... FOR EACH ROW 触发器时禁用批量插入(Etsuro Fujita)§
这样的触发器可能会查询它所在的表,并期望看到之前插入的行。在批量插入时,这些行可能还不可见,因此禁用该功能以避免意外行为。
变更
在 contrib/postgres_fdw 中,在请求远程排序查询之前验证 ORDER BY 子句是否可以安全传送,并在必要时包含 USING 子句(Ronan Dunklau)§
此修复防止了远程服务器可能按与我们意图不同的顺序排序的情况。虽然有时这只是表面问题,但如果远程数据被用作本地执行的合并连接的输入,则可能产生完全错误的结果。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 configure 以处理具有 sys/epoll.h 但没有 sys/signalfd.h 的平台(Tom Lane)§
变更
更新 JIT 代码以支持 LLVM 14(Thomas Munro)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
清理在 clang 的 -fsanitize=undefined 检查下出现的各种失败(Tom Lane,Andres Freund,Zhihong Yu)§ § § § §
这些变更大多只是为了形式上符合 C 和 POSIX 标准的字面要求,不太可能对生产构建产生任何影响。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在不使用 OpenSSL 构建时,不要将 OpenSSL 依赖项添加到 libpq 的 pkg-config 文件中(Fabrice Fontaine)§
变更
修复 PL/Perl 使其能在不支持嵌套在表达式中的语句的 C 编译器上构建(Tom Lane)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复在 Windows 上不使用 MSVC 构建时 pg_dumpall 可能的构建失败(Andres Freund)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在 Windows 构建中,使用 gendef 代替 pexports 来构建 DEF 文件(Andrew Dunstan)§
这使构建过程适应了最近的 MSys 工具链。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
防止在 MinGW 下构建的程序中对 shell 通配符模式进行额外展开(Andrew Dunstan)§
出于某种原因,MinGW 提供的 C 库默认会展开程序命令行参数中的 shell 通配符字符。这令人困惑,尤其是因为在 MSVC 下不会发生这种情况,因此将其关闭。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
将时区数据文件更新为 tzdata 2022a 版本,包含巴勒斯坦的夏令时规则变更,以及智利和乌克兰的历史修正。(Tom Lane)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
试试其他关键词,或。
对比以 PostgreSQL 发行说明为依据,汇总起始版本之后、目标版本及之前的变更,支持同一大版本内的小版本更新,以及跨大版本升级。跨大版本时,旧分支的维护记录只纳入到下一大版本首次发布之日,所有记录均不晚于目标版本的发布日期。大版本名称(如 18)指首个正式版本(18.0);测试版与开发快照会单独标注。
条目正文来自本站中文手册,版本清单、条目覆盖与提交依据逐一核对上游英文原文。每条变更保留完整说明与原文链接;分类用于辅助浏览,具体影响、适用条件与升级操作请阅读条目正文和各版本的升级说明。
同一修复可能回补到多个版本分支。对比会保守合并可确认相同的条目,并保留各分支完整说明;已知由起始版本包含的修复会排除。一条说明包含多个独立修复时,只有全部已包含才排除。大版本新功能不因与旧版补丁存在提交关联而合并,不能确认相同的条目继续保留。这是发行说明的累计差异,不能覆盖二进制程序之间的每一处代码变化。
CVE 独立依据 PostgreSQL 官方安全公告与漏洞记录计算:起始版本受影响、目标版本已修复或不受影响的漏洞才计入,按编号去重。目标版本仍受影响的漏洞另行提示;安全变更条数与 CVE 数量分别统计。
交互参考 pgversions.com 与 pgversionreport,内容来自 PostgreSQL 发行说明。更多历史资料见发行说明归档。