文档版本比较
POSTGRESQL · VERSION COMPARE
PostgreSQL 10.4 发布变化
此版本的完整功能、修复与兼容性说明,以及其他版本的关联记录。
包括起始版本之后至目标版本的变化。大版本号表示该分支的首个版本。
从数据库输出识别起始版本
完整发布变化
10.4
2018-05-10
10.4stable支持截止 2022-11-10
安全变化
| CVE / 问题 | 严重程度 | 修复版本 | 所选版本状态 |
|---|---|---|---|
| CVE-2018-1115 撤销 contrib/adminpack 的 pg_logfile_rotate() 函数的公共执行权限 | 10.4 | 已记录修复 |
PostgreSQL 10.4
迁移与兼容性
对于运行 10.X 的用户,不需要执行导出/恢复。
但是,如果使用了 adminpack 扩展,应按照下方第一条变更日志更新它。
此外,如果下方第二和第三条变更日志提到的函数标记错误影响到您,应采取措施纠正数据库目录。
此外,如果是从早于 10.3 的版本升级,请参见第 E.21 节。
安全撤销 contrib/adminpack 的 pg_logfile_rotate() 函数的公共执行权限
变更
撤销 contrib/adminpack 的 pg_logfile_rotate() 函数的公共执行权限(Stephen Frost)
pg_logfile_rotate() 是核心函数 pg_rotate_logfile() 的一个已弃用包装函数。后者改为依靠 SQL 权限进行访问控制,而不再使用硬编码的超级用户检查时,本应同时更新 pg_logfile_rotate(),但这一点被遗漏了。因此,如果安装了 adminpack,任何用户都可以请求轮转日志文件,造成一个较轻微的安全问题。
安装此更新后,管理员应在每个安装了 adminpack 的数据库中执行 ALTER EXTENSION adminpack UPDATE,以更新 adminpack。(CVE-2018-1115)
问题修复修复若干内置函数不正确的易变性标记
变更
修复若干内置函数不正确的易变性标记(Thomas Munro,Tom Lane)
函数 query_to_xml、cursor_to_xml、cursor_to_xmlschema、query_to_xmlschema 和 query_to_xml_and_xmlschema 应标记为易变,因为它们执行用户提供的查询,而这些查询可能包含易变操作。以前未作此标记,存在查询优化不正确的风险。通过纠正初始目录数据,新安装已修复此问题,但现有安装仍包含不正确的标记。这些函数的实际使用似乎风险很小,但如果遇到问题,可以手动更新这些函数的 pg_proc 条目,例如 ALTER FUNCTION pg_catalog.query_to_xml(text, boolean, boolean, text) VOLATILE。(注意,必须在安装中的每个数据库内执行。)另一种方法是使用 pg_upgrade 将数据库升级到包含已纠正初始数据的版本。
问题修复修复若干内置函数不正确的并行安全性标记
变更
修复若干内置函数不正确的并行安全性标记(Thomas Munro,Tom Lane)
函数 brin_summarize_new_values、brin_summarize_range、brin_desummarize_range、gin_clean_pending_list、cursor_to_xml、cursor_to_xmlschema、ts_rewrite、ts_stat、binary_upgrade_create_empty_extension 和 pg_import_system_collations 应标记为并行不安全;其中一些直接修改数据库,另一些执行可能修改数据库的用户查询。以前,它们却被标记为并行受限,存在发生意外查询错误的风险。通过纠正初始目录数据,新安装已修复此问题,但现有安装仍包含不正确的标记。除非开启 force_parallel_mode,这些函数的实际使用似乎风险很小。如果遇到问题,可以手动更新这些函数的 pg_proc 条目,例如 ALTER FUNCTION pg_catalog.brin_summarize_new_values(regclass) PARALLEL UNSAFE。(注意,必须在安装中的每个数据库内执行。)另一种方法是使用 pg_upgrade 将数据库升级到包含已纠正初始数据的版本。
关联记录 (1)
改进避免复用与已死亡但尚未清理的 TOAST 条目匹配的 TOAST 值 OID
变更
避免复用与已死亡但尚未清理的 TOAST 条目匹配的 TOAST 值 OID(Pavan Deolasee)
一旦 OID 计数器发生回卷,就可能为 TOAST 值分配一个与同一 TOAST 表中先前删除条目相同的 OID。如果该条目尚未被清理,这会导致 “unexpected chunk number 0 (expected 1) for toast value nnnnn” 错误,并持续到 VACUUM 移除死亡条目为止。修复方法是在创建新 TOAST 条目时不选择此类 OID。
改进向分区表执行 COPY 时,正确实施各个分区上的所有 CHECK 约束
变更
向分区表执行 COPY 时,正确实施各个分区上的所有 CHECK 约束(Etsuro Fujita)
以前,只会检查为整个分区表声明的约束。
改进接受 TRUE 和 FALSE 作为分区边界值
变更
接受 TRUE 和 FALSE 作为分区边界值(Amit Langote)
以前,布尔类型的分区列只接受字符串字面值。但 pg_dump 会将这些值输出为 TRUE 或 FALSE,从而导致转储/重载失败。
问题修复修复分区键比较函数的内存管理
变更
修复分区键比较函数的内存管理(Álvaro Herrera,Amit Langote)
使用用户定义的分区键操作符类时,此错误可能导致崩溃。
问题修复修复查询向分区表的多个分区插入元组,且这些分区行类型不同时可能发生的崩溃
变更
修复查询向分区表的多个分区插入元组,且这些分区行类型不同时可能发生的崩溃(Etsuro Fujita,Amit Langote)
改进更改 ANALYZE 更新 pg_class.reltuples 的算法
变更
更改 ANALYZE 更新 pg_class.reltuples 的算法(David Gould)
以前,假定 ANALYZE 未实际扫描的页面保持原有元组密度。对于大表,ANALYZE 仅对很小一部分页面采样,这意味着整体元组密度估算无法发生太大变化,因此无论表内实际发生什么,reltuples 都会近似正比于表物理大小(relpages)的变化而变化。已观察到这会使 reltuples 远大于实际值,以至于自动清理实际上停止工作。修复方法是假定 ANALYZE 的样本是该表统计上无偏的样本(它本应如此),并直接将这些页面内观测到的密度外推到整个表。
改进将扩展统计对象包含在 CREATE TABLE ... LIKE ... INCLUDING ALL 复制的表属性集合中
变更
将扩展统计对象包含在 CREATE TABLE ... LIKE ... INCLUDING ALL 复制的表属性集合中(David Rowley)
同时添加 INCLUDING STATISTICS 选项,以更细致地控制是否复制这些对象。
问题修复修复带有 bigint 标识列的 CREATE TABLE ... LIKE
变更
修复带有 bigint 标识列的 CREATE TABLE ... LIKE(Peter Eisentraut)
在 long 为 32 位的平台上(包括 64 位 Windows 和大多数 32 位机器),复制的序列参数会被截断为 32 位。
问题修复避免在 SERIALIZABLE 或 REPEATABLE READ 事务隔离级别下并发运行 CREATE INDEX CONCURRENTLY 命令时发生死锁
变更
避免在 SERIALIZABLE 或 REPEATABLE READ 事务隔离级别下并发运行 CREATE INDEX CONCURRENTLY 命令时发生死锁(Tom Lane)
关联记录 (3)
- 相同变化PostgreSQL 9.6.9 · 避免在 SERIALIZABLE 或 REPEATABLE READ 事务隔离下运行的并发 CREATE INDEX CONCURRENTLY 命令中的死锁
- 相同变化PostgreSQL 9.5.13 · 避免在 SERIALIZABLE 或 REPEATABLE READ 事务隔离下运行的并发 CREATE INDEX CONCURRENTLY 命令中的死锁
- 相同变化PostgreSQL 9.4.18 · 避免在 SERIALIZABLE 或 REPEATABLE READ 事务隔离下运行的并发 CREATE INDEX CONCURRENTLY 命令中的死锁
问题修复修复 REFRESH MATERIALIZED VIEW CONCURRENTLY 可能执行缓慢的问题
变更
修复 REFRESH MATERIALIZED VIEW CONCURRENTLY 可能执行缓慢的问题(Thomas Munro)
问题修复修复 UPDATE/DELETE ... WHERE CURRENT OF,使其在所引用游标使用仅索引扫描计划时不会失败
变更
修复 UPDATE/DELETE ... WHERE CURRENT OF,使其在所引用游标使用仅索引扫描计划时不会失败(Yugo Nagata,Tom Lane)
关联记录 (4)
- 相同变化PostgreSQL 9.6.9 · 修复 UPDATE/DELETE ... WHERE CURRENT OF 在所引用游标使用仅索引扫描计划时不失败
- 相同变化PostgreSQL 9.5.13 · 修复 UPDATE/DELETE ... WHERE CURRENT OF 在所引用游标使用仅索引扫描计划时不失败
- 相同变化PostgreSQL 9.4.18 · 修复 UPDATE/DELETE ... WHERE CURRENT OF 在所引用游标使用仅索引扫描计划时不失败
- 相同变化PostgreSQL 9.3.23 · 修复 UPDATE/DELETE ... WHERE CURRENT OF 在所引用游标使用仅索引扫描计划时不失败
问题修复修复对下推到参数化路径的连接子句的不正确规划
变更
修复对下推到参数化路径的连接子句的不正确规划(Andrew Gierth,Tom Lane)
此错误可能将本应为普通“过滤”条件的条件错误归类为外连接的“连接过滤”条件,导致连接输出不正确。
问题修复修复同一表列出现在多个索引列中,且只有部分索引列使用能够返回列值的操作符类时,可能错误生成仅索引扫描计划的问题
变更
修复同一表列出现在多个索引列中,且只有部分索引列使用能够返回列值的操作符类时,可能错误生成仅索引扫描计划的问题(Kyotaro Horiguchi)
问题修复修复对 CHECK 约束的不正确优化,此类约束的顶层 AND/OR 条件包含可证明为 NULL 的子句
变更
修复对 CHECK 约束的不正确优化,此类约束的顶层 AND/OR 条件包含可证明为 NULL 的子句(Tom Lane,Dean Rasheed)
例如,这可能使约束排除机制从查询中排除本不应被排除的子表。
问题修复防止查询具有多个 GROUPING SETS 且没有任何一个可以通过排序实现时规划器崩溃
变更
防止查询具有多个 GROUPING SETS 且没有任何一个可以通过排序实现时规划器崩溃(Andrew Gierth)
问题修复修复某些 GROUPING SETS 用法中因重复释放导致的执行器崩溃
变更
修复某些 GROUPING SETS 用法中因重复释放导致的执行器崩溃(Peter Geoghegan)
问题修复修复对过渡表执行自连接时的不正确执行
变更
修复对过渡表执行自连接时的不正确执行(Thomas Munro)
问题修复避免添加表重写事件触发器与可能调用此类触发器的命令并发进行时发生崩溃
变更
避免添加表重写事件触发器与可能调用此类触发器的命令并发进行时发生崩溃(Álvaro Herrera,Andrew Gierth,Tom Lane)
改进避免提交预备事务时出现查询取消或会话终止中断而发生失败
变更
避免提交预备事务时出现查询取消或会话终止中断而发生失败(Stas Kelvich)
问题修复修复重复执行的哈希连接中持续整个查询生命周期的内存泄漏
变更
修复重复执行的哈希连接中持续整个查询生命周期的内存泄漏(Tom Lane)
问题修复修复可见性映射缓冲区固定可能泄漏或重复释放的问题
改进避免错误地将页标记为全可见
变更
避免错误地将页标记为全可见(Dan Wood,Pavan Deolasee,Álvaro Herrera)
某些元组被锁定(但未删除)时,可能出现此问题。虽然查询仍能正常运行,但清理通常会忽略这些页,长期后果是这些元组永远不会被冻结。在近期版本中,这最终会导致 “found multixact nnnnn from before relminmxid nnnnn” 等错误。
关联记录 (1)
问题修复修复 heap_prepare_freeze_tuple 中过于严格的合理性检查
变更
修复 heap_prepare_freeze_tuple 中过于严格的合理性检查(Álvaro Herrera)
这可能导致通过 pg_upgrade 从 9.2 或更早版本升级的数据库出现不正确的 “cannot freeze committed xmax” 失败。
改进防止用 C 编写的更新前行触发器返回“旧”元组时解引用悬空指针
变更
防止用 C 编写的更新前行触发器返回“旧”元组时解引用悬空指针(Rushabh Lathia)
改进减少自动清理工作进程调度期间的加锁
变更
减少自动清理工作进程调度期间的加锁(Jeff Janes)
对于有大量表的数据库,以前的行为会大幅降低工作进程原本可以达到的并发度。
改进确保将 pg_stat_activity 数据复制到本地内存时也复制客户端主机名
变更
确保将 pg_stat_activity 数据复制到本地内存时也复制客户端主机名(Edmund Horner)
以前,本应位于本地的快照包含一个指向共享内存的指针,因此任何现有会话断开连接,都可能使客户端主机名列意外改变。
改进正确处理辅助进程的 pg_stat_activity 信息
变更
正确处理辅助进程的 pg_stat_activity 信息(Edmund Horner)
这些进程的 application_name、client_hostname 和 query 字段可能显示不正确的数据。
问题修复修复 ispell 字典对多个复合词缀处理不正确的问题
变更
修复 ispell 字典对多个复合词缀处理不正确的问题(Arthur Zakirov)
问题修复修复文本列上 SP-GiST 索引中考虑排序规则的搜索(即使用不等式操作符的索引扫描)
变更
修复文本列上 SP-GiST 索引中考虑排序规则的搜索(即使用不等式操作符的索引扫描)(Tom Lane)
在大多数非 C 区域设置下,这类搜索会返回错误的行集。
问题修复防止使用遍历值的 SP-GiST 操作符类在查询生命周期内泄漏内存
变更
防止使用遍历值的 SP-GiST 操作符类在查询生命周期内泄漏内存(Anton Dignös)
改进在首次构建 SP-GiST 索引时正确统计索引元组数
变更
在首次构建 SP-GiST 索引时正确统计索引元组数(Tomas Vondra)
以前,报告的元组数与底层表相同,但对于部分索引,这个值是不正确的。
改进在清理 GiST 索引时正确统计索引元组数
变更
在清理 GiST 索引时正确统计索引元组数(Andrey Borodin)
以前,报告的是估算的堆元组数,这个值可能不准确,而对于部分索引则肯定不正确。
问题修复修复流复制备库卡在 WAL 续接记录上的一种边界情况
变更
修复流复制备库卡在 WAL 续接记录上的一种边界情况(Kyotaro Horiguchi)
改进在逻辑解码中,避免 WAL 发送进程重启时可能重复处理 WAL 数据的问题
变更
在逻辑解码中,避免 WAL 发送进程重启时可能重复处理 WAL 数据的问题(Craig Ringer)
问题修复修复逻辑复制,使其不再假定本地和远程服务器的类型 OID 相同
变更
修复逻辑复制,使其不再假定本地和远程服务器的类型 OID 相同(Masahiko Sawada)
改进允许将 scalarltsel 和 scalargtsel 用于非核心数据类型
变更
允许将 scalarltsel 和 scalargtsel 用于非核心数据类型(Tomas Vondra)
改进减少已收集大量查询输出后收到服务器错误时 libpq 的内存消耗
变更
减少已收集大量查询输出后收到服务器错误时 libpq 的内存消耗(Tom Lane)
在处理错误消息之前丢弃先前的输出,而不是之后。在某些平台上,尤其是 Linux,这会影响应用程序后续的内存占用。
问题修复修复 ecpg 中重复释放引发的崩溃
变更
修复 ecpg 中重复释放引发的崩溃(Patrick Krecker,Jeevan Ladhe)
问题修复修复 ecpg,使其在 MSVC 构建中正确处理 long long int 变量
变更
修复 ecpg,使其在 MSVC 构建中正确处理 long long int 变量(Michael Meskes,Andrew Gierth)
问题修复修复转储中列表值 GUC 变量的值引用不正确的问题
变更
修复转储中列表值 GUC 变量的值引用不正确的问题(Michael Paquier,Tom Lane)
pg_dump 输出中未正确引用 local_preload_libraries、session_preload_libraries、shared_preload_libraries 和 temp_tablespaces 变量。如果这些变量的设置出现在 CREATE FUNCTION ... SET 或 ALTER DATABASE/ROLE ... SET 子句中,就会导致问题。
问题修复修复 pg_recvlogical,使其连接到 v10 之前的 PostgreSQL 服务器时不会失败
变更
修复 pg_recvlogical,使其连接到 v10 之前的 PostgreSQL 服务器时不会失败(Michael Paquier)
之前的一项修复导致 pg_recvlogical 无论服务器版本如何都会发出一条命令,但该命令只应向 v10 及更高版本的服务器发出。
改进确保 pg_rewind 在运行期间源服务器删除文件时,也删除目标服务器上的这些文件
变更
确保 pg_rewind 在运行期间源服务器删除文件时,也删除目标服务器上的这些文件(Takayuki Tsunakawa)
未执行此操作可能导致目标上的数据不一致,尤其当相关文件是 WAL 段时。
问题修复修复 pg_rewind,使其正确处理非默认表空间中的表
变更
修复 pg_rewind,使其正确处理非默认表空间中的表(Takayuki Tsunakawa)
问题修复修复 PL/pgSQL 整数 FOR 循环的溢出处理
变更
修复 PL/pgSQL 整数 FOR 循环的溢出处理(Tom Lane)
以前的代码在某些非 gcc 编译器下无法检测循环变量的溢出,导致无限循环。
改进调整 PL/Python 回归测试,使其在 Python 3.7 下通过
变更
调整 PL/Python 回归测试,使其在 Python 3.7 下通过(Peter Eisentraut)
改进支持在使用 Python 3 和 MSVC 构建时测试 PL/Python 及相关模块
变更
支持在使用 Python 3 和 MSVC 构建时测试 PL/Python 及相关模块(Andrew Dunstan)
问题修复修复首次构建 contrib/bloom 索引时的错误
变更
修复首次构建 contrib/bloom 索引时的错误(Tomas Vondra,Tom Lane)
修复索引可能遗漏表的最后一个元组的问题。对于部分索引,正确统计索引元组数。
关联记录 (1)
改进重命名内部函数 b64_encode 和 b64_decode,避免与 Solaris 11.4 的内置函数冲突
变更
重命名内部函数 b64_encode 和 b64_decode,避免与 Solaris 11.4 的内置函数冲突(Rainer Orth)
关联记录 (4)
- 相同变化PostgreSQL 9.6.9 · 重命名内部 b64_encode 和 b64_decode 函数,避免与 Solaris 11.4 内置函数冲突
- 相同变化PostgreSQL 9.5.13 · 重命名内部 b64_encode 和 b64_decode 函数,避免与 Solaris 11.4 内置函数冲突
- 相同变化PostgreSQL 9.4.18 · 重命名内部 b64_encode 和 b64_decode 函数,避免与 Solaris 11.4 内置函数冲突
- 相同变化PostgreSQL 9.3.23 · 重命名内部 b64_encode 和 b64_decode 函数,避免与 Solaris 11.4 内置函数冲突
改进将所用时区库同步到 IANA tzcode 2018e 版
变更
将所用时区库同步到 IANA tzcode 2018e 版(Tom Lane)
此更新修复了 zic 时区数据编译器,使其能够处理负的夏令时偏移量。虽然 PostgreSQL 项目不会立即附带此类时区数据,但 zic 可能用于处理直接从 IANA 获取的时区数据,因此现在更新 zic 是稳妥的做法。
改进将时区数据文件更新到 tzdata 2018d 版,以反映巴勒斯坦和南极洲(凯西站)的夏令时法规变更,并修正葡萄牙及其殖民地、恩德伯里岛、牙买加、特克斯 & 凯科斯群岛和乌拉圭的历史数据。
变更
将时区数据文件更新到 tzdata 2018d 版,以反映巴勒斯坦和南极洲(凯西站)的夏令时法规变更,并修正葡萄牙及其殖民地、恩德伯里岛、牙买加、特克斯 & 凯科斯群岛和乌拉圭的历史数据。
关联记录 (4)
- 相同变化PostgreSQL 9.6.9 · 更新时区数据文件到 tzdata 版本 2018d,涉及巴勒斯坦和南极洲(凯西站)的夏令时法规变更,以及葡萄牙及其殖民地、恩德伯里、牙买加、特克斯和凯科斯群岛及乌拉圭的历史修正。
- 相同变化PostgreSQL 9.5.13 · 更新时区数据文件到 tzdata 版本 2018d,涉及巴勒斯坦和南极洲(凯西站)的夏令时法规变更,以及葡萄牙及其殖民地、恩德伯里、牙买加、特克斯和凯科斯群岛及乌拉圭的历史修正。
- 相同变化PostgreSQL 9.4.18 · 更新时区数据文件到 tzdata 版本 2018d,涉及巴勒斯坦和南极洲(凯西站)的夏令时法规变更,以及葡萄牙及其殖民地、恩德伯里、牙买加、特克斯和凯科斯群岛及乌拉圭的历史修正。
- 相同变化PostgreSQL 9.3.23 · 更新时区数据文件到 tzdata 版本 2018d,涉及巴勒斯坦和南极洲(凯西站)的夏令时法规变更,以及葡萄牙及其殖民地、恩德伯里、牙买加、特克斯和凯科斯群岛及乌拉圭的历史修正。
没有匹配的变化
尝试其他关键词,或 .
如何生成比较结果?
比较依据起始版本之后至目标版本的 PostgreSQL 发布说明。经核实的回补重复项会谨慎合并,保留每条原始说明;相关提交可能涉及独立变化,仍作为不同记录保留。
发布快照: 2026-09-26 · 安全快照: 2026-09-26
内容来自 PostgreSQL 发布说明。交互方式参考 pgversions.com 与 pgversionreport.