pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
文档版本对比
POSTGRESQL · VERSION COMPARE
本次发布的完整功能、修复与兼容性说明,以及它们在其他版本中的关联记录。
从起始版本之后,看到目标版本为止。大版本名称代表该系列首个正式版本。
收录 PostgreSQL 9.0 起的 17 个大版本、352 份发布说明;数据更新于 2026-09-26。
本次发布的全部变更
2021-11-11
14.1 受支持版本维护截止 2026-11-12
| CVE / 问题 | 严重程度 | 修复版本 |
|---|---|---|
| CVE-2021-23214 使服务器在 SSL 或 GSS 加密握手后拒绝多余的数据 | 8.1 | 14.1 |
| CVE-2021-23222 使 libpq 在 SSL 或 GSS 加密握手后拒绝多余的数据 | 3.7 | 14.1 |
对于运行 14.X 的用户,不需要执行导出/恢复。
但是,请注意使用物理复制的安装应先更新备库再更新主库,如下面第三个变更日志条目所述。
此外,已发现若干可能导致索引损坏的错误,如接下来几个变更日志条目所述。如果存在上述任一情况,建议在更新后重建可能受影响的索引。
变更
使服务器在 SSL 或 GSS 加密握手后拒绝多余的数据(Tom Lane)§
能够向 TCP 连接注入数据的中间人攻击者可以在本应受加密保护的数据库会话开始时塞入一些明文数据。这可以被用来向服务器发送伪造的 SQL 命令,不过只有在服务器不要求任何认证数据时才能生效。(然而,依赖 SSL 证书认证的服务器很可能不会要求认证数据。)
PostgreSQL 项目感谢 Jacob Champion 报告此问题。(CVE-2021-23214)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
使 libpq 在 SSL 或 GSS 加密握手后拒绝多余的数据(Tom Lane)§
能够向 TCP 连接注入数据的中间人攻击者可以在本应受加密保护的数据库会话开始时塞入一些明文数据。这可能被用来向客户端注入伪造的响应,不过 libpq 行为的其他细节使得这比听起来更难实现。另一种攻击方式是窃取客户端的密码或其他可能在会话早期发送的敏感数据。已证明在受 CVE-2021-23214 漏洞影响的服务器上这是可能的。
PostgreSQL 项目感谢 Jacob Champion 报告此问题。(CVE-2021-23222)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复在主库发送以不完整 WAL 记录结尾的 WAL 段后崩溃时的物理复制问题(Álvaro Herrera)§ § § § §
如果主库未能存活足够长的时间来完成写入不完整 WAL 记录的剩余部分,则之前的崩溃恢复逻辑会回退并从不完整 WAL 记录的开头处重新覆盖写入 WAL。这是有问题的,因为备库可能已有该 WAL 段的副本。它们随后会看到不一致的下一个段,将无法在没有人工干预的情况下恢复。为修复此问题,在崩溃后重新启动时不再跨越 WAL 段边界回退。而是在下一个 WAL 段的开头写入一种新类型的 WAL 记录,通知读取器不完整的 WAL 记录将永远不会被完成且必须被忽略。
应用此更新时,最好先更新备库再更新主库,这样如果主库发生崩溃,备库就已准备好处理这种新类型的 WAL 记录。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
确保并行 VACUUM 不会遗漏任何索引(Peter Geoghegan,Masahiko Sawada)§
如果表还有至少两个大于 min_parallel_index_scan_size 阈值的索引,则并行 VACUUM 会无法处理低于该阈值的索引。这可能导致那些索引变得损坏,因为它们仍然包含对已被 VACUUM 移除的堆条目的引用;使用此类索引的后续查询可能会返回不应返回的行。此问题不影响 autovacuum,因为它不使用并行清理。但是,建议对具有合适索引大小组合的手动执行清理的表重建索引。
变更
修复 CREATE INDEX CONCURRENTLY 以等待最新的预备事务(Andrey Borodin)§
刚刚预备的事务插入的行可能会从新索引中遗漏,导致依赖该索引的查询错过此类行。之前对此类问题的修复未能考虑到在 CREATE INDEX CONCURRENTLY 检查时仍在进行中的 PREPARE TRANSACTION 命令。与之前一样,在启用了预备事务(max_prepared_transactions > 0)的安装中,建议重建所有并发构建的索引,以防在构建时发生了此问题。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免竞态条件导致后端无法将新行的条目添加到正在并发构建的索引中(Noah Misch,Andrey Borodin)§
虽然此情况在实际环境中似乎很少发生,但它可能影响使用 CONCURRENTLY 选项构建或重建的任何索引。建议重建此类索引以确保其正确性。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 REINDEX CONCURRENTLY 以保留附加到目标索引上的操作符类参数(Michael Paquier)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复克隆包含非内置对象的数据库时共享依赖关系的错误创建(Aleksander Alekseev)§
此错误在实际中的影响可能是有限的。原则上,它可能允许在角色仍拥有对象时被删除;但大多数安装永远不会想要删除曾被用于向 template1 添加对象的角色。
变更
确保在将表附加到分区表或从分区表中分离时正确地使关系缓存失效(Amit Langote,Álvaro Herrera)§
此疏忽可能导致直接对该分区进行后续插入/更新时出现错误行为,但仅在当前已存在的会话中。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复创建范围类型时解析树的损坏(Alex Kozhemyakin,Sergey Shinderuk)§
CREATE TYPE 错误地释放了解析树的一个元素,这可能导致后续事件触发器出现问题,或者如果 CREATE TYPE 命令被存储在计划缓存中并在稍后再次使用时也会出问题。
变更
修复复合类型上域的数组中元素字段的更新问题(Tom Lane)§
如果数组的元素是域而不是普通复合类型,则类似 UPDATE tab SET fld[1].subfld = val 这样的命令会失败。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
禁止 FETCH FIRST WITH TIES 和 FOR UPDATE SKIP LOCKED 的组合(David Christensen)§
FETCH FIRST WITH TIES 必然会多获取一行,因为在找到非并列行之前它无法停止。在我们当前的实现中,如果使用了 FOR UPDATE,那么该行也会被锁定,即使它不会被返回。如果指定了 SKIP LOCKED 选项,则会导致不期望的行为。在不引入另一组不期望行为的情况下很难改变这一点,因此目前禁止此组合。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
禁止 ALTER INDEX index ALTER COLUMN col SET (options)(Nathan Bossart,Michael Paquier)§
虽然解析器接受此语法,但它没有文档记录且实际上不起作用。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 numeric power() 在边界情况下的精度损失(Dean Rasheed)§
当第一个参数非常接近 1 时,结果可能不准确。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免为 Memoize 计划选择错误的 hash 相等操作符(David Rowley)§
此错误可能导致崩溃或不正确的查询结果。
变更
修复将子查询表达式上拉到函数范围表条目时的规划器错误(Tom Lane)§
如果 FROM 中的函数横向引用了 FROM 子句中较早出现的某个子 SELECT 的输出,并且我们能够将该子 SELECT 展平到外层查询中,则复制到函数表达式中的表达式未被完全处理。这可能导致执行时崩溃。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免仅使用 MCV 统计信息来估计列的范围(Tom Lane)§
在某些边界情况下,ANALYZE 会构建高频值(MCV)列表但不构建直方图,即使 MCV 列表并未包含所有观测值。在这种情况下,防止规划器仅使用 MCV 列表来估计列值的范围。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复子事务内部 Portal 快照的恢复(Bertrand Drouvot)§
如果过程提交或回滚了一个事务,然后其下一个重要操作在新的子事务内部,快照管理会出错,导致悬挂指针和可能的崩溃。PL/pgSQL 中的一个典型示例是 COMMIT 紧跟一个执行查询的 BEGIN ... EXCEPTION 块。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
确保在事务导出快照后失败时正确清理(Dilip Kumar)§
此疏忽仅在同一会话再次尝试导出快照时才会导致问题。最可能的场景是创建复制槽(随后回滚)然后再创建另一个复制槽。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
防止备库上溢出子事务跟踪的回卷(Kyotaro Horiguchi,Alexander Korotkov)§
此疏忽可能导致备库上显著的性能下降(表现为过多的 SubtransSLRU 流量)。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
确保在备库提升期间正确地将预备事务纳入考虑(Michael Paquier,Andres Freund)§
存在一个很窄的窗口,预备事务可能从并发运行的会话获取的快照中被遗漏。如果该会话随后使用该快照执行数据更新,可能导致错误的结果或数据损坏。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复当 EXPLAIN 尝试打印附加到 WorkTableScan 节点上的过滤条件时出现的 “could not find RecursiveUnion” 错误(Tom Lane)§
变更
避免在删除拥有正在被并发删除的对象的角色时出现空指针解引用崩溃(Álvaro Herrera)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 CoerceToDomain 表达式节点的低效代码生成(Ranier Vilela)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免在将 NaN 插入 BRIN float8 或 float4 minmax_multi_ops 索引时出现断言失败(Tomas Vondra)§
在生产构建中,此类情况会导致效率稍低但实际上并不错误的索引。
变更
允许 autovacuum 启动器进程更快地响应 pg_log_backend_memory_contexts() 请求(Koyu Tanigawa)§
变更
修复 HMAC hash 计算中的内存泄漏(Sergey Shinderuk)§
变更
当 shared_memory_type 为 sysv 时,禁止将 huge_pages 设置为 on(Thomas Munro)§
之前此设置会被接受,但由于缺乏实现而不起作用。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 PL/pgSQL 中 RETURN QUERY 语句的查询类型检查(Tom Lane)§
RETURN QUERY 应该接受任何能返回元组的查询,例如 UPDATE RETURNING。v14 意外地只允许了 SELECT;此外,RETURN QUERY EXECUTE 变体完全没有进行任何查询类型检查。
变更
修复 pg_dump 以正确导出非全局默认权限(Neil Chen,Masahiko Sawada)§
如果全局(不受限的)ALTER DEFAULT PRIVILEGES 命令撤销了某个默认存在的权限,例如函数的 EXECUTE,然后受限的 ALTER DEFAULT PRIVILEGES 命令又为选定的角色或模式重新授予了该权限,则 pg_dump 无法正确导出受限的权限授予。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
使 pg_dump 对要导出的分区表获取共享锁(Tom Lane)§
此疏忽通常是相当无害的,因为一旦 pg_dump 锁定了任何叶分区,就足以阻止对分区表本身的重大 DDL。但是,在导出没有子分区的分区表时可能出现问题,因为不会持有相关的锁。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 pg_dump 在尝试从 8.3 之前版本的服务器导出触发器定义时的崩溃(Tom Lane)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 pg_restore 关于无效大对象 TOC 文件的错误消息中的不正确文件名(Daniel Gustafsson)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
使 contrib/amcheck 在备库上运行时跳过不记录 WAL 的表(Mark Dilger)§
这样做是合适的,因为此类表将为空,而不记录 WAL 的索引已经以类似方式处理。
变更
改变 contrib/pg_stat_statements 以最大 1GB 为单位读取其“查询文本”文件(Tom Lane)§
如此大的查询文本文件非常不常见,但如果确实出现,之前的代码在 Windows 64 上会失败(因为它拒绝超过 2GB 的单次读取请求)。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 contrib/postgres_fdw 尝试报告数据转换错误时的空指针崩溃(Tom Lane)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
确保 GetSharedSecurityLabel() 可以在尚未构建关键关系缓存条目的新启动会话中使用(Jeff Davis)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
运行 TAP 测试时,将模块自身的目录包含在 PATH 中(Andrew Dunstan)§
这允许测试找到尚未安装的已构建程序,例如自定义测试驱动程序。
变更
使用 CLDR 项目的数据将 Windows 时区名称映射到 IANA 时区(Tom Lane)§ § §
在 Windows 上运行时,initdb 尝试将新集簇的 timezone 参数设置为与系统当前时区匹配的 IANA 时区。我们使用的是多年前生成的映射表,并且只是零星地更新;不出所料,它包含许多错误以及遗漏了最近添加的时区。事实证明 CLDR 一直在跟踪最合适的映射,所以开始使用他们的数据。此更改不会影响任何现有安装,仅影响新初始化的集簇。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
将时区数据文件更新至 tzdata release 2021e,包含斐济、约旦、巴勒斯坦和萨摩亚的夏令时法律变更,以及巴巴多斯、库克群岛、圭亚那、纽埃、葡萄牙和汤加的历史更正。(Tom Lane)§
此外,Pacific/Enderbury 时区已重命名为 Pacific/Kanton。同时,以下时区已合并到附近的、人口更多的时区中,因为它们的时钟自 1970 年以来一直与之一致:Africa/Accra、America/Atikokan、America/Blanc-Sablon、America/Creston、America/Curacao、America/Nassau、America/Port_of_Spain、Antarctica/DumontDUrville 和 Antarctica/Syowa。在所有这些情况下,之前的时区名称仍作为别名保留。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
试试其他关键词,或。
对比以 PostgreSQL 发行说明为依据,汇总起始版本之后、目标版本及之前的变更,支持同一大版本内的小版本更新,以及跨大版本升级。跨大版本时,旧分支的维护记录只纳入到下一大版本首次发布之日,所有记录均不晚于目标版本的发布日期。大版本名称(如 18)指首个正式版本(18.0);测试版与开发快照会单独标注。
条目正文来自本站中文手册,版本清单、条目覆盖与提交依据逐一核对上游英文原文。每条变更保留完整说明与原文链接;分类用于辅助浏览,具体影响、适用条件与升级操作请阅读条目正文和各版本的升级说明。
同一修复可能回补到多个版本分支。对比会保守合并可确认相同的条目,并保留各分支完整说明;已知由起始版本包含的修复会排除。一条说明包含多个独立修复时,只有全部已包含才排除。大版本新功能不因与旧版补丁存在提交关联而合并,不能确认相同的条目继续保留。这是发行说明的累计差异,不能覆盖二进制程序之间的每一处代码变化。
CVE 独立依据 PostgreSQL 官方安全公告与漏洞记录计算:起始版本受影响、目标版本已修复或不受影响的漏洞才计入,按编号去重。目标版本仍受影响的漏洞另行提示;安全变更条数与 CVE 数量分别统计。
交互参考 pgversions.com 与 pgversionreport,内容来自 PostgreSQL 发行说明。更多历史资料见发行说明归档。