pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
文档版本对比
POSTGRESQL · VERSION COMPARE
本次发布的完整功能、修复与兼容性说明,以及它们在其他版本中的关联记录。
从起始版本之后,看到目标版本为止。大版本名称代表该系列首个正式版本。
收录 PostgreSQL 9.0 起的 17 个大版本、352 份发布说明;数据更新于 2026-09-26。
本次发布的全部变更
2020-11-12
9.6.20 历史版本维护截止 2021-11-11
| CVE / 问题 | 严重程度 | 修复版本 |
|---|---|---|
| CVE-2020-25695 禁止在索引表达式和物化视图查询中执行 DECLARE CURSOR ... WITH HOLD 以及触发延迟触发器 | 8.8 | 9.6.20 |
| CVE-2020-25694 修复 pg_dump、pg_restore、 clusterdb、reindexdb 和 vacuumdb 中复杂连接字符串参数的用法 | 8.1 | 9.6.20 |
| CVE-2020-25696 防止 psql 的 \gset 命令修改特殊处理的变量 | 7.5 | 9.6.20 |
对于运行 9.6.X 的用户,不需要转储/恢复。
不过,如果你是从 9.6.16 之前的版本升级,参见第 E.9 节。
变更
禁止在索引表达式和物化视图查询中执行 DECLARE CURSOR ... WITH HOLD 以及触发延迟触发器(Noah Misch)
这本质上是“安全受限操作”沙箱机制中的一种泄漏。有权创建非临时 SQL 对象的攻击者可以利用此泄漏以超级用户身份执行任意 SQL 代码。
PostgreSQL 项目感谢 Etienne Stalmans 报告此问题。(CVE-2020-25695)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 pg_dump、pg_restore、 clusterdb、reindexdb 和 vacuumdb 中复杂连接字符串参数的用法(Tom Lane)
pg_dump 和 pg_restore 的 -d 参数,或所述其他程序的 --maintenance-db 参数,可以是包含多个连接参数的“连接字符串”而不只是数据库名。在这些程序需要发起额外连接的场合(如并行处理或多数据库处理),连接字符串被遗忘,额外连接只使用了基本连接参数(数据库名、主机、端口和用户名)。如果连接字符串包含任何其他必要信息(如非默认的 SSL 或 GSS 参数),这可能导致连接失败。更糟的是,连接可能成功但没有按预期加密,或者容易受到原本预期的连接参数可以阻止的中间人攻击。(CVE-2020-25694)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
当 psql 的 \connect 命令复用连接参数时,确保先前连接字符串中所有未被覆盖的参数都被复用(Tom Lane)
这避免了因遗漏相关参数(如非默认的 SSL 或 GSS 选项)而导致重连失败的情况。更糟的是,重连可能成功但没有按预期加密,或者容易受到原本预期的连接参数可以阻止的中间人攻击。这与刚才提到的 pg_dump 等程序的问题基本相同,不过 psql 的行为更复杂,因为用户可能有意覆盖某些连接参数。(CVE-2020-25694)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
防止 psql 的 \gset 命令修改特殊处理的变量(Noah Misch)
不带前缀的 \gset 会覆盖服务器让它设置的任何变量。因此,一个被攻破的服务器可以设置 PROMPT1 等特殊处理的变量,从而能够在用户的会话中执行任意 shell 代码。
PostgreSQL 项目感谢 Nick Cleaton 报告此问题。(CVE-2020-25696)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
防止并发截断 SLRU 日志可能导致的数据丢失(Noah Misch)
这一罕见问题之后会表现为 “apparent wraparound” 或 “could not access status of transaction” 错误。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
确保检查点期间正确 fsync SLRU 目录(Thomas Munro)
这防止了后续操作系统崩溃时可能的数据丢失。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复对具有 BYPASSRLS 属性的用户的 ALTER ROLE(Tom Lane、Stephen Frost)
BYPASSRLS 属性只允许超级用户更改,但其他 ALTER ROLE 操作(如更改密码)应只需普通权限检查即可。原来的编码错误地把对此类角色的所有更改都限制为超级用户。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复带继承的 CREATE TABLE LIKE 中表达式的处理(Tom Lane)
如果一条 CREATE TABLE 命令同时使用了 LIKE 和传统继承,来自 LIKE 父表的 CHECK 约束和表达式索引中的列引用容易被编错号,导致错误答案和/或离奇的错误消息。在拥有该特性的分支中,GENERATED 表达式也可能发生同样的问题。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 to_date() 和 to_timestamp() 中负年份转换为公元前日期的差一错误(Dar Alathar-Yemen、Tom Lane)
同时,让负年份与显式“BC”标记的组合相互抵消并产生公元日期。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
确保 archive_mode 设为 always 时备库服务器会归档 WAL 时间线历史文件(Grigory Smolkin、Fujii Masao)
这一疏漏可能导致后续 PITR 恢复尝试失败。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在“smart”关闭期间,直到所有客户端(前台)会话结束之前不要终止后台进程(Tom Lane)
原来的行为破坏了并行查询处理,因为 postmaster 会终止并行工作者并拒绝启动新的。它还导致自动清理停止工作,如果幸存的客户端会话进行大量数据更改,这可能有严重的长期影响。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免 postmaster 处理信号时递归消耗栈空间(Tom Lane)
据观察,大量使用并行处理会因过多并发信号请求创建并行工作者进程而导致 postmaster 崩溃。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免因 SIGQUIT 退出时运行 atexit 处理器(Kyotaro Horiguchi、Tom Lane)
大多数服务器进程已经遵循这一做法,但归档器进程被遗漏了。仍在等待客户端启动包的后端也做错了。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免错误优化引用表面常量分组列的子查询限定条件(Tom Lane)
如果“常量”子查询输出列是只出现在部分分组集中的分组列,它就不是真正的常量。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免 SQL 函数内联改变潜在可哈希子计划比较表达式形状时的失败(Tom Lane)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在构建或重建索引期间,容忍并发更新导致的新 HOT 链的出现(Anastasia Lubennikova、Álvaro Herrera)
这一疏漏可能导致 “failed to find parent tuple for heap-only tuple” 错误。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
确保数据在插入 BRIN 索引之前被解 TOAST(Tomas Vondra)
索引条目不应包含外联 TOAST 指针,但 BRIN 没有遵守这一点。这可能导致 “missing chunk number 0 for toast value NNN” 之类的错误。(如果现有索引报出这种错误,REINDEX 就足以修复。)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在 BRIN 索引扫描期间正确处理并发取消摘要(Alexander Lakhin、Álvaro Herrera)
此前,如果某个页范围恰好在错误的时间被取消摘要,索引扫描可能错误地报出指示索引损坏的错误。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复多列 GIN 索引扫描中罕见的 “lost saved point in index” 错误(Tom Lane)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复事件触发器监视 ALTER TABLE 操作时的释放后使用风险(Jehan-Guillaume de Rorthais)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复关于移动聚合数据类型不一致的错误错误消息(Jeff Janes)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免并行工作者报告很长的错误消息时的锁死(Vignesh C)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免通过共享内存队列传输超大载荷时不必要的失败(Markus Wanner)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 RLS 策略导致的关系缓存内存泄漏(Tom Lane)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 SIGHUP 处理判定新的 GUC 变量值必须重启才能应用时的小内存泄漏(Tom Lane)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
让 libpq 支持 .pgpass 文件中任意长度的行(Tom Lane)
这主要用于允许使用很长的安全令牌作为密码。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在 Windows 的 libpq 中,每进程调用一次 WSAStartup(),完全不调用 WSACleanup()(Tom Lane、Alexander Lakhin)
此前,libpq 在连接开始时调用 WSAStartup(),在连接清理时调用 WSACleanup()。然而,调用 WSACleanup() 似乎会干扰其他程序操作;特别是,我们观察到向 stdout 输出预期内容偶尔失败。省略该调用似乎没有不良影响,因此就这么做。(这还消除了程序执行一系列数据库连接时因反复加载和卸载 DLL 导致的性能问题。)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 ecpg 库在 Windows 上的每线程初始化逻辑(Tom Lane、Alexander Lakhin)
多线程的 ecpg 应用可能因错误的锁定而出现罕见的错误行为。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在 Windows 上,让 psql 以文本模式而非二进制模式读取反引号命令的输出(Tom Lane)
这确保正确处理换行符。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
确保 pg_dump 收集扩展配置表的逐列信息(Fabrízio de Royes Mello、Tom Lane)
没有做到这一点会导致指定 --inserts 时崩溃,或在使用 COPY 重新装载表数据时生成欠指定(虽然通常正确)的 COPY 命令。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
让 pg_upgrade 检查目标集簇中表空间目录的预先存在(Bruce Momjian)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 contrib/pgcrypto 中潜在的内存泄漏(Michael Paquier)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在 contrib/pgcrypto 中为一个不太可能发生的失败情况添加检查(Daniel Gustafsson)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在 configure 的测试程序中使用 return 而非 exit()(Peter Eisentraut)
这避免了更挑剔的编译器下的失败。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
更新时区数据文件到 tzdata 版本 2020d,涉及斐济、摩洛哥、巴勒斯坦、加拿大育空、麦夸里岛和凯西站(南极洲)的夏令时法规变更,以及法国、匈牙利、摩纳哥和巴勒斯坦的历史修正。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
把我们的时区库副本与 IANA tzcode 版本 2020d 同步(Tom Lane)
这吸收了上游把 zic 默认输出选项从 “fat” 改为 “slim” 的变更。对我们的用途而言这只是表面变化,因为我们在 v13 之前的分支中继续选择 “fat” 模式。这一更改还确保 strftime() 不会在未失败时更改 errno。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
试试其他关键词,或。
对比以 PostgreSQL 发行说明为依据,汇总起始版本之后、目标版本及之前的变更,支持同一大版本内的小版本更新,以及跨大版本升级。跨大版本时,旧分支的维护记录只纳入到下一大版本首次发布之日,所有记录均不晚于目标版本的发布日期。大版本名称(如 18)指首个正式版本(18.0);测试版与开发快照会单独标注。
条目正文来自本站中文手册,版本清单、条目覆盖与提交依据逐一核对上游英文原文。每条变更保留完整说明与原文链接;分类用于辅助浏览,具体影响、适用条件与升级操作请阅读条目正文和各版本的升级说明。
同一修复可能回补到多个版本分支。对比会保守合并可确认相同的条目,并保留各分支完整说明;已知由起始版本包含的修复会排除。一条说明包含多个独立修复时,只有全部已包含才排除。大版本新功能不因与旧版补丁存在提交关联而合并,不能确认相同的条目继续保留。这是发行说明的累计差异,不能覆盖二进制程序之间的每一处代码变化。
CVE 独立依据 PostgreSQL 官方安全公告与漏洞记录计算:起始版本受影响、目标版本已修复或不受影响的漏洞才计入,按编号去重。目标版本仍受影响的漏洞另行提示;安全变更条数与 CVE 数量分别统计。
交互参考 pgversions.com 与 pgversionreport,内容来自 PostgreSQL 发行说明。更多历史资料见发行说明归档。