pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
文档版本对比
POSTGRESQL · VERSION COMPARE
本次发布的完整功能、修复与兼容性说明,以及它们在其他版本中的关联记录。
从起始版本之后,看到目标版本为止。大版本名称代表该系列首个正式版本。
收录 PostgreSQL 9.0 起的 17 个大版本、352 份发布说明;数据更新于 2026-09-26。
本次发布的全部变更
2020-02-13
12.2 历史版本维护截止 2024-11-21
| CVE / 问题 | 严重程度 | 修复版本 |
|---|---|---|
| CVE-2017-7484 如果用户能够读取查询中实际指定的表的相应列,则允许规划器对子表统计信息应用可能泄漏信息的测试 | 4.3 | |
| CVE-2020-1720 为 ALTER ... DEPENDS ON EXTENSION 补上缺失的权限检查 | 3.1 | 12.2 |
对于运行 12.X 的用户,不需要执行导出/恢复。
但是,如果有任何引用分区表的外键约束,请参阅下方关于该特性缺陷的两项记录。
变更
为 ALTER ... DEPENDS ON EXTENSION 补上缺失的权限检查(Álvaro Herrera)§
将对象标记为依赖某个扩展时,没有进行任何权限检查。这一疏漏使任何用户都可以将例程、触发器、物化视图或索引标记为可由任何有权删除该扩展的用户删除。现在要求调用用户拥有指定对象(因而有权删除它)。(CVE-2020-1720)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 TRUNCATE ... CASCADE,确保截断所有相关分区(Jehan-Guillaume de Rorthais)§
如果使用 CASCADE 选项截断分区表的一个分区,且另一个表通过外键引用该分区表,则另一个表也必须被截断。当引用表本身也是分区表时,遗漏了这一检查,可能使违反外键约束的行保留下来。
因此,如果分区表之间存在外键约束,且曾对被引用表执行过任何分区级 TRUNCATE,就应检查是否存在违反外键约束的行。最简单的方法是添加一个新的同样的外键约束(添加成功后,删除新约束或原约束)。不过,从锁定的角度看,这样做可能代价过高;在这种情况下,可以选择手动查询不匹配的行。
变更
修复未能将外键约束附加到子分区的问题(Jehan-Guillaume de Rorthais)§
向多级分区表第一层以下的层级添加分区时,引用顶层分区表的外键约束未被克隆到新分区,可能导致之后违反约束。分离新分区后再重新附加,是修复此问题代价最低的方法。不过,如果需要修复的分区很多,添加一个新的同样的外键约束可能更合适。
变更
修复对分区表或继承树进行并发更新时可能发生的崩溃(Tom Lane)§
变更
确保在适当情况下,将分区表上的行触发器正确克隆到子分区(Álvaro Herrera)§
创建或附加分区时,可能遗漏用户定义的触发器(但不会遗漏外键或延迟唯一约束的触发器)。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复逻辑复制订阅者代码,使其在适当情况下执行逐列 UPDATE 触发器(Peter Eisentraut)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复逻辑复制订阅者处理行更新时可能发生的崩溃或数据损坏(Tom Lane,Tomas Vondra)§
只有当订阅者的表包含未从发布者复制、且数据类型按引用传递的列时,此缺陷才会导致可见问题。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复对已订阅关系进行 DDL 变更后逻辑复制订阅者的崩溃(Jehan-Guillaume de Rorthais,Vignesh C)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复数据库崩溃并重启后逻辑复制发布者的失败(Vignesh C)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
提高使用 REPLICA IDENTITY FULL 的逻辑复制效率(Konstantin Knizhnik)§
更新或删除操作中查找现有元组时,返回第一个匹配元组,而非最后一个。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复基础备份,使其能够处理大于 INT32_MAX 的数据库 OID(Peter Eisentraut)§
变更
确保并行计划始终在正确的时机关闭(Kyotaro Horiguchi)§
已知这一疏漏会使多批次并行哈希连接产生 “temporary file leak” 警告。
变更
防止过早关闭位于 Limit 节点下方的 Gather 或 GatherMerge 计划节点(Amit Kapila)§
这可以避免此类计划节点需要被扫描多次时发生失败,例如它位于嵌套循环内侧时。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
提高多核 CPU 上并行哈希连接的效率(Gang Deng,Thomas Munro)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免没有空闲动态共享内存槽时发生内存泄漏(Thomas Munro)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在临时表上创建、删除或重建索引时,忽略 CONCURRENTLY 选项(Michael Paquier,Heikki Linnakangas,Andres Freund)§
这可以避免临时表具有 ON COMMIT 动作时发生奇怪的失败。对临时表使用 CONCURRENTLY 本来就没有益处,因为其他会话无法访问该表,额外处理没有意义。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复重置标记为 ON COMMIT DELETE ROWS 的临时表上的表达式索引时可能发生的失败(Tom Lane)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复对 box、range 和 inet 数据类型执行 BRIN 索引操作时可能发生的崩溃(Heikki Linnakangas)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复多行 VALUES 列表中包含 SubPlan(子 SELECT)时可能发生的崩溃(Tom Lane)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 ALTER TABLE 的失败:GENERATED 表达式引用的列已在同一 ALTER 命令前面的操作中被添加或更改了类型(Tom Lane)§
变更
修复元组转换期间未能为“缺失”属性插入默认值的问题(Vik Fearing,Andrew Gierth)§
当值来自通过 ALTER TABLE ADD COLUMN 添加、且具有常量默认值的列时,这可能导致它们被错误地读取为 NULL。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 FileClose() 失败后发生的崩溃(Noah Misch)§
只有启用 data_sync_retry 时才能观察到此问题,否则 FileClose() 失败会被报告为 PANIC。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复对外部表上多个 AFTER ROW 触发器的处理(Etsuro Fujita)§
变更
修复使用按引用传递的聚合转换状态时发生的罕见崩溃(Andres Freund,Teodor Sigaev)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
改进 to_date() 和 to_timestamp() 中的错误报告(Tom Lane,Álvaro Herrera)§ §
报告输入字符串中不正确的月份名或星期名时,可能在多字节字符中间截断输入,导致错误消息的编码不正确,并可能引发后续失败。现在改为在下一个空白处截断。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复对公元前日期计算 EXTRACT(ISOYEAR FROM 时结果相差一的问题(Tom Lane)§timestamp)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
确保 char 类型的 <> 操作符将无法确定排序规则的错误如实报告,而非报告为 “cache lookup failed for collation 0”(Tom Lane)§
变更
避免系统目录中存在自引用视图时 information_schema 视图发生栈溢出(Tom Lane)§
自引用视图无法正常工作,它总会导致无限递归。尝试执行视图时,我们已能正确处理这种情况,但在查询它是否可自动更新时却未能正确处理。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
提高内侧关系非常大时的哈希连接性能(Thomas Munro)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
减少有许多活跃 WAL 发送进程进程时的自旋锁争用(Pierre Ducroquet)§
变更
修复 EXPLAIN 输出中 “Subplans Removed” 字段的位置(Daniel Gustafsson,Tom Lane)§
在非文本输出格式中,此字段被输出到 “Plans” 子组内部,导致输出语法无效。现在按预期将其附加到父级 Append 或 MergeAppend 计划节点。这也会改变该字段在文本输出格式中的位置:如果同一计划节点附加了 InitPlan,“Subplans Removed” 现在会出现在它们之前。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 EXPLAIN 的 SETTINGS 选项,使其在非文本输出格式中输出空值(Tom Lane)§
在非文本输出格式中,请求的字段应当显示,即使其值为空或为零。
变更
如果用户能够读取查询中实际指定的表的相应列,则允许规划器对子表统计信息应用可能泄漏信息的测试(Dilip Kumar,Amit Langote)§
此项修改修复了 CVE-2017-7484 的修复在分区表上引入的性能问题。那次安全修复禁止将可能泄露信息的操作符应用于当前用户无权直接读取的列的统计信息。然而,常见的做法是只在父分区表上授予权限,而不逐一在各个分区上授予权限。在这种情况下,用户可以通过父表读取该列,因此这一安全限制没有意义,只会让规划器的估计不必要地变差。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复过度折叠与单行子查询的连接所导致的规划器错误(Tom Lane)§
这一错误导致了 “failed to construct the join relation” 等错误。
变更
修复尝试将 LIKE 或正则表达式模式匹配操作符与二进制兼容的索引操作符类匹配时出现的 “no = operator for opfamily NNNN” 规划器错误(Tom Lane)§
变更
修复为范围操作符 <@ 和 @> 计算选择率时在边界情况下发生的崩溃和估算错误(Michael Paquier,Andrey Borodin,Tom Lane)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
应用最常见值扩展统计信息时忽略系统列(Tomas Vondra)§
这可避免受影响查询发生 “negative bitmapset member not allowed” 规划器错误。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 BRIN 索引逻辑,使其支持假想 BRIN 索引(Julien Rouhaud,Heikki Linnakangas)§
以前,如果“索引建议器”扩展尝试让规划器生成包含假想 BRIN 索引的计划,就会失败,因为 BRIN 代价估算代码始终尝试实际访问索引的元页面。现在会检查索引是否只是假想索引;如果是,则使用索引参数的默认假设。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
改进对带条件 INSTEAD 规则的视图尝试使用自动更新时的错误报告(Dean Rasheed)§
这种用法从未得到支持,但以前只在执行时才抛出错误,因此它可能被规划器错误掩盖。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复索引表达式使用禁止的类型时的错误报告(Amit Langote)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复仅包含 VALUES 列表的视图的转储,使其能够处理视图输出列被重命名的情况(Tom Lane)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
确保计算视图或规则的依赖关系时,将 XMLTABLE 结构中使用的数据类型和排序规则考虑在内(Tom Lane)§
以前,如果某个类型未在视图中的其他地方被引用,删除该类型就可能破坏使用 XMLTABLE 的视图。此修复不会纠正现有视图已记录的依赖关系,仅对新建视图生效。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
防止 RADIUS 认证参数被意外转换为小写或截断(Marcos David)§
pg_hba.conf 解析器错误地将这些字段当作 SQL 标识符,而它们通常并不是。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在发送 ReadyForQuery 之前向客户端传送收到的 NOTIFY 消息,而非在之后发送(Tom Lane)§
此更改确保,对于 libpq 以及行为类似的其他客户端库,当客户端认为事务已完成时,事务期间收到的所有通知都已可用。这在实际应用中可能没有影响(无论如何,应用都需要处理异步通知),但更便于编写行为可重现的测试用例。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复使用 GSSAPI 加密时处理非阻塞 I/O 的缺陷(Tom Lane)§
这些错误可能导致数据丢失(通常会引发后续的通信协议违规错误),或造成“活锁”:发送进程在数据尚未全部发送时进入休眠。此外,libpq 未能为每个连接保存独立的加密状态,可能导致使用多个加密数据库连接的应用失败。
变更
即使未编译 GSSAPI 代码,也允许 libpq 解析所有与 GSS 有关的连接参数(Tom Lane)§
这使其行为与我们的 SSL 支持类似:我们早已认为始终接受所有相关参数是可取的,即使某个构建缺少相应特性,导致部分参数被忽略或受到限制。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 ecpg 的 PGTYPEStimestamp_fmt_asc() 函数对格式代码 %b 和 %B 的不正确处理(Tomas Vondra)§
由于索引偏差一的错误,这些代码会输出错误的月份名,或可能导致崩溃。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免 ecpglib 中内存不足失败之后发生的崩溃(Tom Lane)§
变更
修复并行 pg_dump/pg_restore,使其更妥善地处理无法创建工作进程的情况(Tom Lane)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
防止尝试通过信号终止并行 pg_dump/pg_restore 运行时可能发生的崩溃或卡死(Tom Lane)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在 pg_upgrade 搜索表中不可升级的数据类型时,检查数组和范围的内部类型(Tom Lane)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
对 createuser 的 --connection-limit 选项进行更全面的语法检查(Álvaro Herrera)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在更多情况下处理 PL/pgSQL 复合类型变量所引用的具体类型发生变更的情况(Ashutosh Sharma,Tom Lane)§
删除并重新创建 PL/pgSQL 变量所引用的复合类型,可能导致 “could not open relation with OID NNNN” 错误。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免 postgres_fdw 尝试向远程服务器发送 UPDATE remote_tab SET (x,y) = (SELECT ...) 之类命令时发生崩溃(Tom Lane)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在 contrib/dict_int 中,拒绝小于一的 maxlen 设置(Tomas Vondra)§
这可防止该参数设置不合理时可能发生的崩溃。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在 contrib/tablefunc 的 crosstab() 函数中禁止 NULL 类别值(Joe Conway)§
这种情况从未产生有用的结果,而且在某些平台上会导致崩溃。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 configure 对 OpenSSL 的 SSL_clear_options() 函数的探测,使其适用于 1.1.0 之前的 OpenSSL 版本(Michael Paquier,Daniel Gustafsson)§
使用旧版 OpenSSL 构建 PostgreSQL 时,此问题可能导致无法按预期设置 SSL 压缩选项。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
将某些超时和统计跟踪 GUC 变量标记为 PGDLLIMPORT,以允许扩展在 Windows 上访问它们(Pascal Legrand)§
这适用于 idle_in_transaction_session_timeout、lock_timeout、statement_timeout、track_activities、track_counts 和 track_functions。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免 “slab” 内存上下文健全性检查中的内存泄漏(Tomas Vondra)§
这不会影响生产构建,因为它们通常不会启用内存上下文检查;但在调试构建中,这种泄漏可能相当严重。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 LWLock 统计机制报告重复统计条目的问题(Fujii Masao)§
由于 hash 表键创建有误,LWLock 统计代码(默认不编译,需要使用 -DLWLOCK_STATS 编译)可能为同一个 LWLock 和后端进程报告多个条目。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复导致 Windows 上进程间信号延迟传递的竞争条件(Amit Kapila)§
这使 NOTIFY 出现了可见的时序异常,也可能导致其他错误行为。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复对 Windows 的 ReadFile() 函数在边界情况下返回的错误结果的处理(Thomas Munro,Juan José Santamaría Flecha)§
据目前所知,这一疏漏只导致多余的日志消息,并未造成实际的查询错误行为。
变更
在 Windows 上,发生 ERROR_ACCESS_DENIED 文件访问失败后重试几次(Alexander Lakhin,Tom Lane)§ §
这有助于处理目标文件已被标记为删除、但尚未实际消失,导致打开文件失败的情况。例如,pg_ctl 在探测 postmaster 是否已经关闭时,经常因此类错误而失败。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在 Windows 上,规避通过 pg_ctl 在 postmaster 停止后很快将其启动时(例如执行 pg_ctl restart),postmaster 日志文件出现的共享冲突(Alexander Lakhin)§
试试其他关键词,或。
对比以 PostgreSQL 发行说明为依据,汇总起始版本之后、目标版本及之前的变更,支持同一大版本内的小版本更新,以及跨大版本升级。跨大版本时,旧分支的维护记录只纳入到下一大版本首次发布之日,所有记录均不晚于目标版本的发布日期。大版本名称(如 18)指首个正式版本(18.0);测试版与开发快照会单独标注。
条目正文来自本站中文手册,版本清单、条目覆盖与提交依据逐一核对上游英文原文。每条变更保留完整说明与原文链接;分类用于辅助浏览,具体影响、适用条件与升级操作请阅读条目正文和各版本的升级说明。
同一修复可能回补到多个版本分支。对比会保守合并可确认相同的条目,并保留各分支完整说明;已知由起始版本包含的修复会排除。一条说明包含多个独立修复时,只有全部已包含才排除。大版本新功能不因与旧版补丁存在提交关联而合并,不能确认相同的条目继续保留。这是发行说明的累计差异,不能覆盖二进制程序之间的每一处代码变化。
CVE 独立依据 PostgreSQL 官方安全公告与漏洞记录计算:起始版本受影响、目标版本已修复或不受影响的漏洞才计入,按编号去重。目标版本仍受影响的漏洞另行提示;安全变更条数与 CVE 数量分别统计。
交互参考 pgversions.com 与 pgversionreport,内容来自 PostgreSQL 发行说明。更多历史资料见发行说明归档。