文档版本比较
POSTGRESQL · VERSION COMPARE
PostgreSQL 9.6.12 发布变化
此版本的完整功能、修复与兼容性说明,以及其他版本的关联记录。
包括起始版本之后至目标版本的变化。大版本号表示该分支的首个版本。
从数据库输出识别起始版本
完整发布变化
9.6.12
2019-02-14
9.6.12stable支持截止 2021-11-11
PostgreSQL 9.6.12
迁移与兼容性
对于运行 9.6.X 的用户,不需要转储/恢复。
不过,如果你是从 9.6.9 之前的版本升级,参见第 E.16 节。
问题修复默认情况下,fsync() 失败后 panic 而不是重试,以避免可能的数据损坏
变更
默认情况下,fsync() 失败后 panic 而不是重试,以避免可能的数据损坏(Craig Ringer、Thomas Munro)
一些流行的操作系统在无法写出内核数据缓冲区时会将其丢弃,并把这报告为 fsync() 失败。如果我们重新发出 fsync() 请求它会成功,但实际上数据已经丢失,因此继续下去有数据库损坏的风险。通过引发 panic 条件,我们可以从 WAL 重放——这种情况下 WAL 中可能包含数据的唯一剩余副本。虽然这无疑丑陋且低效,但几乎没有其他选择,所幸这种情况很少发生。
新增了服务器参数data_sync_retry来控制这一行为;如果你确定你的内核在此类场景下不会丢弃脏数据缓冲区,可以把 data_sync_retry 设为 on 恢复旧行为。
改进每个大版本分支的文档只包含该分支的发行说明,而不是该分支及所有之后分支的
变更
每个大版本分支的文档只包含该分支的发行说明,而不是该分支及所有之后分支的(Tom Lane)
以前的政策造成的重复越来越失控。我们的计划是在项目网站上提供完整的发行说明归档,而不是在每个发行版中重复它。
问题修复避免获取多个缓冲区锁时可能的死锁
变更
避免获取多个缓冲区锁时可能的死锁(Nishant Fnu)
问题修复避免热备查询与 GIN 索引页删除重放之间的死锁
变更
避免热备查询与 GIN 索引页删除重放之间的死锁(Alexander Korotkov)
问题修复修复使用索引表达式或谓词时逻辑复制可能的崩溃
变更
修复使用索引表达式或谓词时逻辑复制可能的崩溃(Peter Eisentraut)
改进避免表重写期间对 TOAST 数据无用而昂贵的逻辑解码
变更
避免表重写期间对 TOAST 数据无用而昂贵的逻辑解码(Tomas Vondra)
问题修复修复启用同步复制时只停止一部分 WAL 发送者的逻辑
变更
修复启用同步复制时只停止一部分 WAL 发送者的逻辑(Paul Guo、Michael Paquier)
改进避免在元组删除 WAL 记录中可能写入错误的副本身份字段
变更
避免在元组删除 WAL 记录中可能写入错误的副本身份字段(Stas Kelvich)
改进让归档器在选择下一个要归档的文件时,把 WAL 历史文件的优先级置于 WAL 数据文件之上
变更
让归档器在选择下一个要归档的文件时,把 WAL 历史文件的优先级置于 WAL 数据文件之上(David Steele)
问题修复修复使用子 SELECT 作为源的多 SET 子句 UPDATE 可能的崩溃
变更
修复使用子 SELECT 作为源的多 SET 子句 UPDATE 可能的崩溃(Tom Lane)
问题修复避免 libxml2 返回空错误消息时崩溃
变更
避免 libxml2 返回空错误消息时崩溃(Sergio Conde Gómez)
问题修复修复排序规则分配处理不一致导致的虚假分组相关分析器错误
变更
修复排序规则分配处理不一致导致的虚假分组相关分析器错误(Andrew Gierth)
某些情况下,如果表达式包含对可排序数据类型的操作,本应被视为匹配的表达式没有被看作匹配。
改进检查 LEAST() 或 GREATEST() 底层的比较函数是否防泄漏,而不是直接假定它防泄漏
变更
检查 LEAST() 或 GREATEST() 底层的比较函数是否防泄漏,而不是直接假定它防泄漏(Tom Lane)
btree 比较函数的实际信息泄漏通常很难诱发,但原则上可能发生。
问题修复修复涉及 Gather 计划节点上下都有嵌套循环的查询的错误规划
变更
修复涉及 Gather 计划节点上下都有嵌套循环的查询的错误规划(Tom Lane)
如果两层 nestloop 都需要把同一个变量传入它们的右侧,就会生成错误的计划。
问题修复修复必须在外部表扫描处求值横向引用的查询的错误规划
变更
修复必须在外部表扫描处求值横向引用的查询的错误规划(Tom Lane)
问题修复修复归并连接代价的边界低估
变更
修复归并连接代价的边界低估(Tom Lane)
当外键范围远小于内键范围时,即使内侧有如此多的重复键以至于这是糟糕的选择,规划器也可能偏爱归并连接。
改进避免查询包含数千个可索引子句时 O(N^2) 的规划时间增长
变更
避免查询包含数千个可索引子句时 O(N^2) 的规划时间增长(Tom Lane)
改进改进 ANALYZE 对并发更新行的处理
变更
改进 ANALYZE 对并发更新行的处理(Jeff Janes、Tom Lane)
此前,进行中事务删除的行被排除在 ANALYZE 的样本之外,但事实证明这比包含它们导致更多不一致。现在,样本实际上对应 ANALYZE 开始时刻的 MVCC 快照。
改进让 TRUNCATE 忽略作为其他会话临时表的继承子表
变更
让 TRUNCATE 忽略作为其他会话临时表的继承子表(Amit Langote、Michael Paquier)
这使 TRUNCATE 与其他命令的行为一致。此前这种情况通常以失败告终。
问题修复修复 TRUNCATE 更新正确表的统计计数器
变更
修复 TRUNCATE 更新正确表的统计计数器(Tom Lane)
如果被截断的表有 TOAST 表,被重置的却是那张表的计数器。
改进正确处理 ALTER TABLE ONLY ADD COLUMN IF NOT EXISTS
变更
正确处理 ALTER TABLE ONLY ADD COLUMN IF NOT EXISTS(Greg Stark)
改进允许在热备模式下执行 UNLISTEN
变更
允许在热备模式下执行 UNLISTEN(Shay Rojansky)
这必然是无操作,因为热备模式下不允许 LISTEN;但允许这个哑操作可以简化客户端的会话状态重置逻辑。
问题修复修复某些模式和数据类型权限列表中缺失的角色依赖
变更
修复某些模式和数据类型权限列表中缺失的角色依赖(Tom Lane)
某些情况下可以删除已被授予权限的角色。这不会立即造成问题,但之后的转储/恢复或升级会失败,症状涉及尝试向全数字角色名授予权限。
改进确保添加或删除外键约束之后正确更新关系缓存
变更
确保添加或删除外键约束之后正确更新关系缓存(Álvaro Herrera)
这一疏漏可能导致现有会话不强制执行新创建的约束,或继续执行已删除的约束。
改进确保重命名约束之后正确更新关系缓存
变更
确保重命名约束之后正确更新关系缓存(Amit Langote)
改进让自动清理更积极地移除遗留的临时表,并在 DISCARD TEMP 期间也移除遗留临时表
变更
让自动清理更积极地移除遗留的临时表,并在 DISCARD TEMP 期间也移除遗留临时表(Álvaro Herrera)
这有助于确保崩溃会话的残留更及时地被清理。
问题修复修复 GiST 索引微清理操作的重放,使并发热备查询不会看到不一致状态
变更
修复 GiST 索引微清理操作的重放,使并发热备查询不会看到不一致状态(Alexander Korotkov)
改进防止空 GIN 索引页被过快回收导致并发搜索失败
变更
防止空 GIN 索引页被过快回收导致并发搜索失败(Andrey Borodin、Alexander Korotkov)
问题修复修复浮点到整数强制转换的边界失败
变更
修复浮点到整数强制转换的边界失败(Andrew Gierth、Tom Lane)
略高于最大有效整数值的值可能未被拒绝,随后发生溢出,产生最小有效整数。另外,本应舍入到最小或最大整数值的值可能被错误拒绝。
改进发起 PAM 认证请求时,如果连接是通过 Unix 套接字的,不要设置 PAM_RHOST 变量
变更
发起 PAM 认证请求时,如果连接是通过 Unix 套接字的,不要设置 PAM_RHOST 变量(Thomas Munro)
此前该变量会被设为 [local],这至多是无益的,因为它本应是主机名。
改进禁止把 client_min_messages 设得比 ERROR 更高
变更
禁止把 client_min_messages 设得比 ERROR 更高(Jonah Harris、Tom Lane)
此前可以把该变量设为 FATAL 或 PANIC,效果是抑制向客户端传输普通错误消息。然而这违背了 PostgreSQL 线上协议规范中给出的保证,并导致一些客户端非常困惑。在已发布分支中,通过把这种设置静默地当作 ERROR 处理来修复。版本 12 及之后将彻底拒绝这些选项。
问题修复修复 ecpglib 优先使用 uselocale() 或 _configthreadlocale() 而不是 setlocale()
变更
修复 ecpglib 优先使用 uselocale() 或 _configthreadlocale() 而不是 setlocale()(Michael Meskes、Tom Lane)
由于 setlocale() 不是线程局部的,甚至可能不是线程安全的,原来的编码在多线程 ecpg 应用中造成问题。
关联记录 (4)
- 相同变化PostgreSQL 11.2 · 修复 ecpglib,使其优先使用 uselocale() 或 _configthreadlocale(),而非 setlocale()
- 相同变化PostgreSQL 10.7 · 修复 ecpglib,使其优先使用 uselocale() 或 _configthreadlocale(),而非 setlocale()
- 相同变化PostgreSQL 9.5.16 · 修复 ecpglib 优先使用 uselocale() 或 _configthreadlocale() 而不是 setlocale()
- 相同变化PostgreSQL 9.4.21 · 修复 ecpglib 优先使用 uselocale() 或 _configthreadlocale() 而不是 setlocale()
问题修复修复通过 ecpg SQLDA(SQL 描述符区域)传递的 numeric 数据的错误结果
变更
修复通过 ecpg SQLDA(SQL 描述符区域)传递的 numeric 数据的错误结果(Daisuke Higuchi)
带前导零的值没有被正确复制。
问题修复修复 psql 的 \g target 元命令与 COPY TO STDOUT 配合工作的问题
变更
修复 psql 的 \g target 元命令与 COPY TO STDOUT 配合工作的问题(Daniel Vérité)
此前 target 选项被忽略,复制数据总是流向当前的查询输出目标。
改进让 psql 的 LaTeX 输出格式正确渲染特殊字符
变更
让 psql 的 LaTeX 输出格式正确渲染特殊字符(Tom Lane)
反斜线和某些其他 ASCII 标点字符没有被正确渲染,导致文档语法错误或输出中的错误字符。
问题修复修复 pg_dump 对间接依赖主键的物化视图的处理
变更
修复 pg_dump 对间接依赖主键的物化视图的处理(Tom Lane)
这导致此类视图的转储归档条目被错误标记,产生关于 “archive items not in correct section order” 的无害警告;更有害的是,依赖这些标签的选择性恢复选项(如 --section)可能行为异常。
问题修复避免 pg_dump 或 pg_restore 尝试报告错误时在某些平台上的空指针解引用崩溃
变更
避免 pg_dump 或 pg_restore 尝试报告错误时在某些平台上的空指针解引用崩溃(Tom Lane)
问题修复修复 contrib/hstore 为 8.4 或更早版本中创建的空 hstore 值计算正确的哈希值
变更
修复 contrib/hstore 为 8.4 或更早版本中创建的空 hstore 值计算正确的哈希值(Andrew Gierth)
原来的编码给出的结果与更新版本创建的空 hstore 值不同,因此可能导致哈希连接或哈希聚合的错误结果。如果表可能包含最早存储于 8.4 且此后从未转储/恢复过的数据,建议对 hstore 列上的哈希索引执行 REINDEX。
关联记录 (4)
- 相同变化PostgreSQL 11.2 · 修复 contrib/hstore,使其为版本 8.4 或更早版本创建的空 hstore 值计算正确的 hash 值
- 相同变化PostgreSQL 10.7 · 修复 contrib/hstore,使其为版本 8.4 或更早版本创建的空 hstore 值计算正确的 hash 值
- 相同变化PostgreSQL 9.5.16 · 修复 contrib/hstore 为 8.4 或更早版本中创建的空 hstore 值计算正确的哈希值
- 相同变化PostgreSQL 9.4.21 · 修复 contrib/hstore 为 8.4 或更早版本中创建的空 hstore 值计算正确的哈希值
问题修复避免 contrib/intarray 的 gist__int_ops 索引支持处理大输入时崩溃和过长运行时间
变更
避免 contrib/intarray 的 gist__int_ops 索引支持处理大输入时崩溃和过长运行时间(Andrew Gierth)
关联记录 (4)
- 相同变化PostgreSQL 11.2 · 避免向 contrib/intarray 的 gist__int_ops 索引支持代码提供大量输入时发生崩溃或运行时间过长
- 相同变化PostgreSQL 10.7 · 避免向 contrib/intarray 的 gist__int_ops 索引支持代码提供大量输入时发生崩溃或运行时间过长
- 相同变化PostgreSQL 9.5.16 · 避免 contrib/intarray 的 gist__int_ops 索引支持处理大输入时崩溃和过长运行时间
- 相同变化PostgreSQL 9.4.21 · 避免contrib/intarray的gist__int_ops索引支持在大型输入下崩溃和运行时间过长的问题
改进支持 pgxs 构建中的新 Makefile 变量 PG_CFLAGS、PG_CXXFLAGS 和 PG_LDFLAGS
变更
支持 pgxs 构建中的新 Makefile 变量 PG_CFLAGS、PG_CXXFLAGS 和 PG_LDFLAGS(Christoph Berg)
这简化了扩展构建过程的自定义。
关联记录 (4)
- 相同变化PostgreSQL 11.2 · 在 pgxs 构建中支持新的 Makefile 变量 PG_CFLAGS、PG_CXXFLAGS 和 PG_LDFLAGS
- 相同变化PostgreSQL 10.7 · 在 pgxs 构建中支持新的 Makefile 变量 PG_CFLAGS、PG_CXXFLAGS 和 PG_LDFLAGS
- 相同变化PostgreSQL 9.5.16 · 支持 pgxs 构建中的新 Makefile 变量 PG_CFLAGS、PG_CXXFLAGS 和 PG_LDFLAGS
- 相同变化PostgreSQL 9.4.21 · 支持 pgxs 构建中的新 Makefile 变量 PG_CFLAGS、PG_CXXFLAGS 和 PG_LDFLAGS
问题修复修复 Perl 编写的构建脚本不假定 “.” 在搜索路径中,因为最近的 Perl 版本不包含它
变更
修复 Perl 编写的构建脚本不假定 “.” 在搜索路径中,因为最近的 Perl 版本不包含它(Andrew Dunstan)
关联记录 (4)
问题修复修复 OpenBSD 上服务器命令行选项解析的问题
变更
修复 OpenBSD 上服务器命令行选项解析的问题(Tom Lane)
改进重新定位 set_rel_pathlist_hook 的调用,使扩展可以用它为并行查询提供部分路径
变更
重新定位 set_rel_pathlist_hook 的调用,使扩展可以用它为并行查询提供部分路径(KaiGai Kohei)
这预计不影响现有使用场景。
改进更新时区数据文件到 tzdata 版本 2018i,涉及哈萨克斯坦、梅特拉卡特拉以及圣多美和普林西比的夏令时法规变更。哈萨克斯坦的克孜勒奥尔达时区一分为二,创建了新时区 Asia/Qostanay,因为部分地区没有更改 UTC 偏移。还有香港和众多太平洋岛屿的历史修正。
变更
更新时区数据文件到 tzdata 版本 2018i,涉及哈萨克斯坦、梅特拉卡特拉以及圣多美和普林西比的夏令时法规变更。哈萨克斯坦的克孜勒奥尔达时区一分为二,创建了新时区 Asia/Qostanay,因为部分地区没有更改 UTC 偏移。还有香港和众多太平洋岛屿的历史修正。
关联记录 (4)
- 相同变化PostgreSQL 11.2 · 将时区数据文件更新到 tzdata 2018i 版,以反映哈萨克斯坦、梅特拉卡特拉及圣多美和普林西比的夏令时法规变更。由于部分地区未更改 UTC 偏移量,哈萨克斯坦的 Qyzylorda 时区被一分为二,创建了新时区 Asia/Qostanay。同时修正了香港及众多太平洋岛屿的历史数据。
- 相同变化PostgreSQL 10.7 · 将时区数据文件更新到 tzdata 2018i 版,以反映哈萨克斯坦、梅特拉卡特拉及圣多美和普林西比的夏令时法规变更。由于部分地区未更改 UTC 偏移量,哈萨克斯坦的 Qyzylorda 时区被一分为二,创建了新时区 Asia/Qostanay。同时修正了香港及众多太平洋岛屿的历史数据。
- 相同变化PostgreSQL 9.5.16 · 更新时区数据文件到 tzdata 版本 2018i,涉及哈萨克斯坦、梅特拉卡特拉以及圣多美和普林西比的夏令时法规变更。哈萨克斯坦的克孜勒奥尔达时区一分为二,创建了新时区 Asia/Qostanay,因为部分地区没有更改 UTC 偏移。还有香港和众多太平洋岛屿的历史修正。
- 相同变化PostgreSQL 9.4.21 · 更新时区数据文件到 tzdata 版本 2018i,涉及哈萨克斯坦、梅特拉卡特拉以及圣多美和普林西比的夏令时法规变更。哈萨克斯坦的克孜勒奥尔达时区一分为二,创建了新时区 Asia/Qostanay,因为部分地区没有更改 UTC 偏移。还有香港和众多太平洋岛屿的历史修正。
没有匹配的变化
尝试其他关键词,或 .
如何生成比较结果?
比较依据起始版本之后至目标版本的 PostgreSQL 发布说明。经核实的回补重复项会谨慎合并,保留每条原始说明;相关提交可能涉及独立变化,仍作为不同记录保留。
发布快照: 2026-09-26 · 安全快照: 2026-09-26
内容来自 PostgreSQL 发布说明。交互方式参考 pgversions.com 与 pgversionreport.