文档版本比较
POSTGRESQL · VERSION COMPARE
PostgreSQL 9.6.13 发布变化
此版本的完整功能、修复与兼容性说明,以及其他版本的关联记录。
包括起始版本之后至目标版本的变化。大版本号表示该分支的首个版本。
从数据库输出识别起始版本
完整发布变化
9.6.13
2019-05-09
9.6.13stable支持截止 2021-11-11
安全变化
| CVE / 问题 | 严重程度 | 修复版本 | 所选版本状态 |
|---|---|---|---|
| CVE-2017-7484 防止通过选择率估计器绕过行级安全策略 | 9.6.3 | 已记录修复 | |
| CVE-2019-10130 防止通过选择率估计器绕过行级安全策略 | 9.6.13 | 已记录修复 |
PostgreSQL 9.6.13
迁移与兼容性
对于运行 9.6.X 的用户,不需要转储/恢复。
不过,如果你是从 9.6.9 之前的版本升级,参见第 E.16 节。
安全防止通过选择率估计器绕过行级安全策略
变更
防止通过选择率估计器绕过行级安全策略(Dean Rasheed)
规划器的一些选择率估计器会对 pg_statistic 中的值(如最常见值)应用用户定义的操作符。因此,泄漏型操作符可以泄露数据列中的一些条目,即使调用用户没有读取该列的权限。我们在 CVE-2017-7484 中加了限制来防止这一点,但没有考虑到行级安全的影响。有 SQL 权限读取某列、但因 RLS 策略被禁止看到某些行的用户,仍可能通过泄漏型操作符了解这些行的内容。本补丁进一步收紧规则,仅当没有相关 RLS 策略时才允许把泄漏型操作符应用于统计数据。(CVE-2019-10130)
问题修复修复对每个表都可被排除的继承树或分区表执行 UPDATE 或 DELETE 时的行为
变更
修复对每个表都可被排除的继承树或分区表执行 UPDATE 或 DELETE 时的行为(Amit Langote、Tom Lane)
这类情况下,当存在 RETURNING 子句时,查询没有报告正确的输出列集合;如果有应当触发的语句级触发器,它也没有触发。
问题修复修复目标关系是可更新视图时带多行 VALUES 的 INSERT ... VALUES 命令中显式 DEFAULT 项的处理
变更
修复目标关系是可更新视图时带多行 VALUES 的 INSERT ... VALUES 命令中显式 DEFAULT 项的处理(Amit Langote、Dean Rasheed)
当可更新视图对该列没有默认值而其底层表有时,单行 INSERT ... VALUES 会使用底层表的默认值。然而在多行情况下,总是使用 NULL。已纠正为与单行情况一致。
关联记录 (4)
- 相同变化PostgreSQL 11.3 · 目标关系为可更新视图时,修复包含多行 VALUES 的 INSERT ... VALUES 命令中对显式 DEFAULT 项的处理
- 相同变化PostgreSQL 10.8 · 目标关系为可更新视图时,修复包含多行 VALUES 的 INSERT ... VALUES 命令中对显式 DEFAULT 项的处理
- 相同变化PostgreSQL 9.5.17 · 修复目标关系是可更新视图时带多行 VALUES 的 INSERT ... VALUES 命令中显式 DEFAULT 项的处理
- 相同变化PostgreSQL 9.4.22 · 修复目标关系是可更新视图时带多行 VALUES 的 INSERT ... VALUES 命令中显式 DEFAULT 项的处理
问题修复修复 CREATE VIEW 允许零列视图
变更
修复 CREATE VIEW 允许零列视图(Ashutosh Sharma)
为了与允许零列表保持一致,我们应当允许这一点。由于表可以被转换为视图,即使有此限制也能创建零列视图,从而导致转储/恢复失败。
改进补上对 CREATE TABLE IF NOT EXISTS ... AS EXECUTE ... 的缺失支持
变更
补上对 CREATE TABLE IF NOT EXISTS ... AS EXECUTE ... 的缺失支持(Andreas Karlsson)
IF NOT EXISTS 与 EXECUTE 的组合应当能工作,但语法中遗漏了它。
问题修复确保行级安全策略表达式中出现的子 SELECT 以正确的用户权限执行
变更
确保行级安全策略表达式中出现的子 SELECT 以正确的用户权限执行(Dean Rasheed)
此前,如果带 RLS 策略的表是通过视图访问的,这种检查可能以调用视图的用户而非应有的视图所有者身份执行。
改进在 xmloption 设为 content 时按 SQL:2006 及后续标准的要求接受 XML 文档作为 xml 类型的有效值
变更
在 xmloption 设为 content 时按 SQL:2006 及后续标准的要求接受 XML 文档作为 xml 类型的有效值(Chapman Flack)
此前 PostgreSQL 遵循不允许这么做的 SQL:2003 定义。但这给转储/恢复带来了严重问题:没有哪个 xmloption 设置能接受所有有效 XML 数据。因此切换到 2006 定义。
还修改了 pg_dump,使其在恢复数据期间发出 SET xmloption = content,确保即使当前设置是 document 转储/恢复也能工作。
关联记录 (4)
- 相同变化PostgreSQL 11.3 · 按照 SQL:2006 及后续标准的要求,当 xmloption 设置为 content 时,接受 XML 文档作为 xml 类型的有效值
- 相同变化PostgreSQL 10.8 · 按照 SQL:2006 及后续标准的要求,当 xmloption 设置为 content 时,接受 XML 文档作为 xml 类型的有效值
- 相同变化PostgreSQL 9.5.17 · 在 xmloption 设为 content 时按 SQL:2006 及后续标准的要求接受 XML 文档作为 xml 类型的有效值
- 相同变化PostgreSQL 9.4.22 · 在 xmloption 设为 content 时按 SQL:2006 及后续标准的要求接受 XML 文档作为 xml 类型的有效值
改进改进服务器启动时对既有共享内存段是否仍在使用的检查
变更
改进服务器启动时对既有共享内存段是否仍在使用的检查(Noah Misch)
即使 postmaster.pid 文件已被移除,postmaster 现在也更可能检测到上一个 postmaster 实例仍有活动进程。
改进避免把并行工作者的事务计为单独的事务
变更
避免把并行工作者的事务计为单独的事务(Haribabu Kommi)
问题修复修复 GIN 索引 WAL 记录的不兼容
变更
修复 GIN 索引 WAL 记录的不兼容(Alexander Korotkov)
二月份小版本中应用的一个修复对向后兼容性不够谨慎,导致那个年代的备库服务器读取前一个小版本的主库生成的 GIN 页删除 WAL 记录时出问题。
改进在适当的情况下容忍 fsync 和 sync_file_range 调用的 EINVAL 和 ENOSYS 错误结果
变更
在适当的情况下容忍 fsync 和 sync_file_range 调用的 EINVAL 和 ENOSYS 错误结果(Thomas Munro、James Sewell)
此前对文件同步失败就 panic 的更改对于某些失败可预见且基本上意味着“操作不受支持”的情况显得过于偏执。
关联记录 (4)
- 相同变化PostgreSQL 11.3 · 在适当情况下,容忍 fsync 和 sync_file_range 调用返回 EINVAL 和 ENOSYS 错误
- 相同变化PostgreSQL 10.8 · 在适当情况下,容忍 fsync 和 sync_file_range 调用返回 EINVAL 和 ENOSYS 错误
- 相同变化PostgreSQL 9.5.17 · 在适当的情况下容忍 fsync 和 sync_file_range 调用的 EINVAL 和 ENOSYS 错误结果
- 相同变化PostgreSQL 9.4.22 · 在适当的情况下容忍 fsync 和 sync_file_range 调用的 EINVAL 和 ENOSYS 错误结果
问题修复修复 FULL 外连接中通向外部横向引用导致的 “failed to build any N-way joins” 规划器失败
变更
修复 FULL 外连接中通向外部横向引用导致的 “failed to build any N-way joins” 规划器失败(Tom Lane)
关联记录 (4)
- 相同变化PostgreSQL 11.3 · 修复从 FULL 外连接向外引用的横向引用导致的 “failed to build any N-way joins” 规划器失败
- 相同变化PostgreSQL 10.8 · 修复从 FULL 外连接向外引用的横向引用导致的 “failed to build any N-way joins” 规划器失败
- 相同变化PostgreSQL 9.5.17 · 修复 FULL 外连接中通向外部横向引用导致的 “failed to build any N-way joins” 规划器失败
- 相同变化PostgreSQL 9.4.22 · 修复 FULL 外连接中通向外部横向引用导致的 “failed to build any N-way joins” 规划器失败
改进在执行关于让泄漏型操作符看到 pg_statistic 数据的规则时,检查正确用户的权限
变更
在执行关于让泄漏型操作符看到 pg_statistic 数据的规则时,检查正确用户的权限(Dean Rasheed)
当底层表通过视图被访问时,在决定是否可以把泄漏型操作符应用于该表的统计数据时,考虑视图所有者的权限而不是发起查询的用户的权限。这使规划器关于哪些数据可见的规则与执行器的规则一致,避免了不必要的低劣计划。
性能加快存在许多等值条件和许多潜在相关外键约束时的规划
变更
加快存在许多等值条件和许多潜在相关外键约束时的规划(David Rowley)
改进避免回滚创建了许多表的事务时的 O(N^2) 性能问题
变更
避免回滚创建了许多表的事务时的 O(N^2) 性能问题(Tomas Vondra)
问题修复修复动态共享内存管理中的竞态条件
变更
修复动态共享内存管理中的竞态条件(Thomas Munro)
这些可能导致 “dsa_area could not attach to segment” 或 “cannot unpin a segment that is not pinned” 错误。
问题修复修复热备 postmaster 收到 smart 关闭请求后可能不关闭的竞态条件
变更
修复热备 postmaster 收到 smart 关闭请求后可能不关闭的竞态条件(Tom Lane)
问题修复修复给 pg_identify_object_as_address() 无效输入时可能的崩溃
变更
修复给 pg_identify_object_as_address() 无效输入时可能的崩溃(Álvaro Herrera)
改进收紧对编码后的 SCRAM-SHA-256 和 MD5 口令的验证
变更
收紧对编码后的 SCRAM-SHA-256 和 MD5 口令的验证(Jonathan Katz)
开头字符正确的口令字符串可能被误认为是已正确哈希为 SCRAM-SHA-256 或 MD5 格式的口令。这种口令会被接受但之后无法使用。
问题修复修复对隐含与数据库编码不同的编码的 lc_time 设置的处理
变更
修复对隐含与数据库编码不同的编码的 lc_time 设置的处理(Juan José Santamaría Flecha、Tom Lane)
包含非 ASCII 字符的本地化月份或日期名此前在此类区域中导致意外错误或错误输出。
问题修复修复涉及一元减号操作符的不正确 operator_precedence_warning 检查
变更
修复涉及一元减号操作符的不正确 operator_precedence_warning 检查(Rikard Falkeborn)
改进禁止把 NaN 用作浮点服务器参数的值
变更
禁止把 NaN 用作浮点服务器参数的值(Tom Lane)
改进重排 REINDEX 处理,避免对 pg_class 的单个索引重建时断言失败
变更
重排 REINDEX 处理,避免对 pg_class 的单个索引重建时断言失败(Andres Freund、Tom Lane)
问题修复修复参数化虚拟路径的规划器断言失败
变更
修复参数化虚拟路径的规划器断言失败(Tom Lane)
问题修复在 SnapBuildInitialSnapshot() 的结果中插入正确的测试函数
变更
在 SnapBuildInitialSnapshot() 的结果中插入正确的测试函数(Antonin Houska)
没有核心代码关心这一点,但一些扩展关心。
问题修复修复 Windows 上间歇性的 “could not reattach to shared memory” 会话启动失败
变更
修复 Windows 上间歇性的 “could not reattach to shared memory” 会话启动失败(Noah Misch)
这些失败的一个此前未被识别的来源是为进程默认线程池创建线程栈。安排把这种栈分配在不同的内存区域。
关联记录 (4)
- 相同变化PostgreSQL 11.3 · 修复 Windows 上间歇出现的 “could not reattach to shared memory” 会话启动失败
- 相同变化PostgreSQL 10.8 · 修复 Windows 上间歇出现的 “could not reattach to shared memory” 会话启动失败
- 相同变化PostgreSQL 9.5.17 · 修复 Windows 上间歇性的 “could not reattach to shared memory” 会话启动失败
- 相同变化PostgreSQL 9.4.22 · 修复 Windows 上间歇性的 “could not reattach to shared memory” 会话启动失败
问题修复修复 Windows 上目录扫描中的错误检测
变更
修复 Windows 上目录扫描中的错误检测(Konstantin Knizhnik)
诸如缺少读取目录权限之类的错误没有被正确检测或报告;代码而是静默地表现为目录为空。
问题修复修复 ecpg 中的语法问题
变更
修复 ecpg 中的语法问题(Tom Lane)
一个缺失的分号导致 ecpg 程序中的 SET (但不是 variable = DEFAULTSET )被错误翻译,产生服务器会拒绝的语法无效输出。此外,在列出多个类型名的 variable TO DEFAULTDROP TYPE 或 DROP DOMAIN 命令中,实际上只处理了第一个类型名。
改进把 ecpg 的 CREATE TABLE AS 语法与服务器的同步
变更
把 ecpg 的 CREATE TABLE AS 语法与服务器的同步(Daisuke Higuchi)
问题修复修复 ecpg 处理 include 文件名时可能的缓冲区越界
变更
修复 ecpg 处理 include 文件名时可能的缓冲区越界(Liu Huailing、Fei Wu)
问题修复避免 lo_unlink() 调用失败时 contrib/vacuumlo 崩溃
变更
避免 lo_unlink() 调用失败时 contrib/vacuumlo 崩溃(Tom Lane)
改进把我们的时区库副本与 IANA tzcode 版本 2019a 同步
变更
把我们的时区库副本与 IANA tzcode 版本 2019a 同步(Tom Lane)
这更正了 zic 的一个小 bug——它在 Africa/Casablanca 时区输出错误的 2440 年转换,并增加了对 zic 新 -r 选项的支持。
改进更新时区数据文件到 tzdata 版本 2019a,涉及巴勒斯坦和梅特拉卡特拉的夏令时法规变更,以及以色列的历史修正。
变更
更新时区数据文件到 tzdata 版本 2019a,涉及巴勒斯坦和梅特拉卡特拉的夏令时法规变更,以及以色列的历史修正。
Etc/UCT 现在是指向 Etc/UTC 的向后兼容链接,而不再是生成缩写 UCT 的独立时区 ——如今 UCT 通常是笔误。PostgreSQL 仍然接受 UCT 作为输入时区缩写,但不会输出它。
关联记录 (4)
- 相同变化PostgreSQL 11.3 · 将时区数据文件更新到 tzdata 2019a 版,以反映巴勒斯坦和梅特拉卡特拉的夏令时法规变更,并修正以色列的历史数据。
- 相同变化PostgreSQL 10.8 · 将时区数据文件更新到 tzdata 2019a 版,以反映巴勒斯坦和梅特拉卡特拉的夏令时法规变更,并修正以色列的历史数据。
- 相同变化PostgreSQL 9.5.17 · 更新时区数据文件到 tzdata 版本 2019a,涉及巴勒斯坦和梅特拉卡特拉的夏令时法规变更,以及以色列的历史修正。
- 相同变化PostgreSQL 9.4.22 · 更新时区数据文件到 tzdata 版本 2019a,涉及巴勒斯坦和梅特拉卡特拉的夏令时法规变更,以及以色列的历史修正。
没有匹配的变化
尝试其他关键词,或 .
如何生成比较结果?
比较依据起始版本之后至目标版本的 PostgreSQL 发布说明。经核实的回补重复项会谨慎合并,保留每条原始说明;相关提交可能涉及独立变化,仍作为不同记录保留。
发布快照: 2026-09-26 · 安全快照: 2026-09-26
内容来自 PostgreSQL 发布说明。交互方式参考 pgversions.com 与 pgversionreport.