↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

文档版本比较

POSTGRESQL · VERSION COMPARE

PostgreSQL 9.5.8 发布变化

此版本的完整功能、修复与兼容性说明,以及其他版本的关联记录。

此版本的完整变化
此版本的完整变化

包括起始版本之后至目标版本的变化。大版本号表示该分支的首个版本。

完整发布变化

9.5.8

2017-08-10

导出 JSON ↓
56项变化功能、修复、改进
1个版本按版本分组
4CVE独立漏洞编号

9.5.8stable支持截止 2021-02-11

安全变化
CVE / 问题严重程度修复版本所选版本状态
CVE-2017-7547

进一步限制 pg_user_mappings.umoptions 的可见性,以保护存储为用户映射选项的密码

9.5.8已记录修复
CVE-2017-7486

进一步限制 pg_user_mappings.umoptions 的可见性,以保护存储为用户映射选项的密码

9.5.7已记录修复
CVE-2017-7546

禁止在所有基于密码的认证方法中使用空密码

9.5.8已记录修复
CVE-2017-7548

让 lo_put() 检查对目标大对象的 UPDATE 权限

9.5.8已记录修复

PostgreSQL 9.5.8

迁移与兼容性

对于运行 9.5.X 的用户,不需要转储/恢复。

不过,如果你使用的外部数据服务器依靠用户密码进行身份验证,请参见下面第一条变更日志条目。

另外,如果你是从 9.5.7 之前的版本升级,参见第 E.19 节。

安全进一步限制 pg_user_mappings.umoptions 的可见性,以保护存储为用户映射选项的密码

变更

进一步限制 pg_user_mappings.umoptions 的可见性,以保护存储为用户映射选项的密码(Noah Misch)

CVE-2017-7486 的修复不正确:它允许用户看到她自己用户映射中的选项,即使她对相关外部服务器没有 USAGE 权限。这种选项可能包含由服务器所有者而非用户自己提供的密码。由于 information_schema.user_mapping_options 在这种情况下不显示选项,pg_user_mappings 也不应该。(CVE-2017-7547)

此补丁本身只会修复新 initdb 的数据库中的行为。如果希望在现有数据库中应用此更改,需要执行以下操作:

  1. 在 postgresql.conf 中添加 allow_system_table_mods = true 后重启 postmaster。(在支持 ALTER SYSTEM 的版本中,可以用它进行配置更改,但仍需重启。)

  2. 在集簇的每个数据库中,以超级用户身份运行以下命令:

    SET search_path = pg_catalog;
    CREATE OR REPLACE VIEW pg_user_mappings AS
    SELECT U.oid AS umid, S.oid AS srvid, S.srvname AS srvname,
           U.umuser AS umuser,
           CASE WHEN U.umuser = 0 THEN 'public' ELSE A.rolname END AS usename,
           CASE WHEN (U.umuser <> 0 AND A.rolname = current_user
                       AND (pg_has_role(S.srvowner, 'USAGE')
                            OR has_server_privilege(S.oid, 'USAGE')))
                    OR (U.umuser = 0 AND pg_has_role(S.srvowner, 'USAGE'))
                    OR (SELECT rolsuper FROM pg_authid WHERE rolname = current_user)
                THEN U.umoptions ELSE NULL END AS umoptions
    FROM pg_user_mapping U
         LEFT JOIN pg_authid A ON (A.oid = U.umuser)
         JOIN pg_foreign_server S ON (U.umserver = S.oid);
    
  3. 不要忘记包括 template0 和 template1 数据库,否则漏洞仍会存在于之后创建的数据库中。要修复 template0,需要暂时让它接受连接。在 PostgreSQL 9.5 及之后,可以使用

    ALTER DATABASE template0 WITH ALLOW_CONNECTIONS true;
    

    修复 template0 之后再撤销:

    ALTER DATABASE template0 WITH ALLOW_CONNECTIONS false;
    

    在更早的版本中,改用:

    UPDATE pg_database SET datallowconn = true WHERE datname = 'template0';
    UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';
    
  4. 最后,移除 allow_system_table_mods 配置设置,并再次重启 postmaster。

关联记录 (4)
安全禁止在所有基于密码的认证方法中使用空密码

变更

禁止在所有基于密码的认证方法中使用空密码(Heikki Linnakangas)

libpq 忽略空的密码说明,不把它们传输给服务器。因此,如果用户的密码被设为空字符串,就无法通过 psql 或其他基于 libpq 的客户端用该密码登录。管理员可能因此认为把密码设为空等同于禁用密码登录。然而,使用修改过的或非 libpq 的客户端,登录可能是可能的,这取决于配置的认证方法。特别是最常见的方法 md5 接受空密码。更改服务器在所有情况下拒绝空密码。(CVE-2017-7546)

关联记录 (4)
安全让 lo_put() 检查对目标大对象的 UPDATE 权限

变更

让 lo_put() 检查对目标大对象的 UPDATE 权限(Tom Lane、Michael Paquier)

lo_put() 理所当然应要求与 lowrite() 相同的权限,但检查缺失,允许任何用户更改大对象中的数据。(CVE-2017-7548)

关联记录 (2)
问题修复更正关于用 pg_upgrade 升级备库服务器过程的文档

变更

更正关于用 pg_upgrade 升级备库服务器过程的文档(Bruce Momjian)

原来的文档指示用户在运行 pg_upgrade 之后、同步备库之前启动/停止主服务器。这个顺序是不安全的。

关联记录 (1)
问题修复修复元组更新链的并发锁定

变更

修复元组更新链的并发锁定(Álvaro Herrera)

如果多个会话用非冲突锁模式并使用旧快照并发锁定一条元组更新链,且都成功,由于竞态条件其中一些仍可能失败(并得出没有存活元组版本的结论)。这会导致诸如外键检查看不到一个确实存在但正被并发更新的元组之类的后果。

关联记录 (3)
问题修复修复冻结 XMAX 是恰好只有一个仍感兴趣成员的多事务的元组时可能的数据损坏

变更

修复冻结 XMAX 是恰好只有一个仍感兴趣成员的多事务的元组时可能的数据损坏(Teodor Sigaev)

关联记录 (3)
问题修复避免在内存中排序超过十亿元组时的整数溢出和随之而来的崩溃

变更

避免在内存中排序超过十亿元组时的整数溢出和随之而来的崩溃(Sergey Koposov)

关联记录 (2)
改进在 Windows 上,如果在新进程中为共享内存保留地址范围失败,则重试进程创建

变更

在 Windows 上,如果在新进程中为共享内存保留地址范围失败,则重试进程创建(Tom Lane、Amit Kapila)

这有望修复可能由杀毒产品干扰导致的偶发子进程启动失败。

关联记录 (4)
问题修复修复 Windows 构建中共享谓词锁哈希表的低概率损坏

变更

修复 Windows 构建中共享谓词锁哈希表的低概率损坏(Thomas Munro、Tom Lane)

关联记录 (4)
改进避免把 SSL 连接的干净关闭当作连接重置来记录

变更

避免把 SSL 连接的干净关闭当作连接重置来记录(Michael Paquier)

关联记录 (4)
改进防止向客户端发送 SSL 会话票据

变更

防止向客户端发送 SSL 会话票据(Tom Lane)

此修复防止使用票据感知的客户端 SSL 代码时的重连失败。

关联记录 (4)
问题修复修复 Solaris 上设置tcp_keepalives_idle的代码

变更

修复 Solaris 上设置tcp_keepalives_idle的代码(Tom Lane)

关联记录 (4)
问题修复修复统计收集器处理 postmaster 关闭并立即重启之后发出的查询消息

变更

修复统计收集器处理 postmaster 关闭并立即重启之后发出的查询消息(Tom Lane)

在上一个 postmaster 关闭之后半秒内发出的统计查询实际上被忽略。

关联记录 (4)
改进确保统计收集器的接收缓冲区大小至少为 100KB

变更

确保统计收集器的接收缓冲区大小至少为 100KB(Tom Lane)

这降低了默认接收缓冲区大小小于该值的老平台上统计数据丢失的风险。

关联记录 (4)
问题修复修复备库刚处理完 XLOG_SWITCH WAL 记录后被提升时可能创建无效 WAL 段的问题

变更

修复备库刚处理完 XLOG_SWITCH WAL 记录后被提升时可能创建无效 WAL 段的问题(Andres Freund)

关联记录 (4)
问题修复修复 walsender 在客户端请求关闭时及时退出

变更

修复 walsender 在客户端请求关闭时及时退出(Tom Lane)

关联记录 (2)
问题修复修复 walsender 进程中的 SIGHUP 和 SIGUSR1 处理

变更

修复 walsender 进程中的 SIGHUP 和 SIGUSR1 处理(Petr Jelinek、Andres Freund)

关联记录 (4)
改进防止关闭检查点期间 walsender 引发的 panic

变更

防止关闭检查点期间 walsender 引发的 panic(Andres Freund、Michael Paquier)

关联记录 (2)
问题修复修复 postmaster 中竞态条件导致的 walreceiver 进程不必要的缓慢重启

变更

修复 postmaster 中竞态条件导致的 walreceiver 进程不必要的缓慢重启(Tom Lane)

关联记录 (4)
问题修复修复逻辑解码期间溢出到磁盘的小子事务的泄漏

变更

修复逻辑解码期间溢出到磁盘的小子事务的泄漏(Andres Freund)

这导致临时文件消耗过多的磁盘空间。

关联记录 (2)
改进减少创建逻辑解码槽期间构建快照所需的工作

变更

减少创建逻辑解码槽期间构建快照所需的工作(Andres Freund、Petr Jelinek)

原来的算法在有大量打开事务的服务器上昂贵得不可行。

关联记录 (2)
问题修复修复可能无限延迟逻辑解码槽创建的竞态条件

变更

修复可能无限延迟逻辑解码槽创建的竞态条件(Andres Freund、Petr Jelinek)

关联记录 (2)
性能减少处理系统缓存失效事件的开销

变更

减少处理系统缓存失效事件的开销(Tom Lane)

这对逻辑解码特别有帮助,它触发频繁的缓存失效。

关联记录 (2)
问题修复修复 INSERT 或 UPDATE 对数组之上域类型的列的多个元素赋值的情况

变更

修复 INSERT 或 UPDATE 对数组之上域类型的列的多个元素赋值的情况(Tom Lane)

关联记录 (4)
改进允许在聚合函数参数内的子 SELECT 中使用窗口函数

变更

允许在聚合函数参数内的子 SELECT 中使用窗口函数(Tom Lane)

关联记录 (3)
改进在 ALTER ... RENAME 期间把自动生成的数组类型移开

变更

在 ALTER ... RENAME 期间把自动生成的数组类型移开(Vik Fearing)

此前我们在 CREATE 期间会把冲突的自动生成数组类型重命名移开;此修复把该行为扩展到重命名操作。

关联记录 (4)
问题修复修复表中约束带有注释时 ALTER TABLE 中的悬空指针

变更

修复表中约束带有注释时 ALTER TABLE 中的悬空指针(David Rowley)

把注释重新应用于重建后的约束时可能因奇怪的错误消息失败,甚至崩溃。

关联记录 (1)
改进确保 ALTER USER ... SET 接受 ALTER ROLE ... SET 接受的所有语法变体

变更

确保 ALTER USER ... SET 接受 ALTER ROLE ... SET 接受的所有语法变体(Peter Eisentraut)

关联记录 (4)
问题修复把数据类型 I/O 函数的参数或返回类型从 opaque 更改为正确类型时正确更新依赖信息

变更

把数据类型 I/O 函数的参数或返回类型从 opaque 更改为正确类型时正确更新依赖信息(Heikki Linnakangas)

CREATE TYPE 会更新以这种早已过时风格声明的 I/O 函数,但忘记记录对类型的依赖,允许随后的 DROP TYPE 留下损坏的函数定义。

关联记录 (4)
改进减少 ANALYZE 处理 tsvector 列时的内存使用

变更

减少 ANALYZE 处理 tsvector 列时的内存使用(Heikki Linnakangas)

关联记录 (4)
问题修复修复 money 值乘以或除以整数或浮点数时不必要的精度丢失和草率舍入

变更

修复 money 值乘以或除以整数或浮点数时不必要的精度丢失和草率舍入(Tom Lane)

关联记录 (4)
改进收紧对解析标识符的函数(如 regprocedurein())中空白的检查

变更

收紧对解析标识符的函数(如 regprocedurein())中空白的检查(Tom Lane)

根据当前区域,这些函数可能把多字节字符的片段误解释为空白。

关联记录 (4)
改进编译 PL/Perl 时使用来自 Perl 的相关 #define 符号

变更

编译 PL/Perl 时使用来自 Perl 的相关 #define 符号(Ashutosh Sharma、Tom Lane)

这避免了可移植性问题(通常表现为库加载期间的“握手”不匹配),在使用最近 Perl 版本时。

关联记录 (4)
改进在 libpq 中,连接尝试失败后正确重置 GSS/SASL 和 SSPI 认证状态

变更

在 libpq 中,连接尝试失败后正确重置 GSS/SASL 和 SSPI 认证状态(Michael Paquier)

不这样做意味着当从 SSL 回退到非 SSL 连接时,SSL 尝试中的 GSS/SASL 失败总是导致非 SSL 尝试失败。SSPI 不会失败,但泄漏内存。

关联记录 (3)
问题修复在 psql 中,修复 COPY FROM STDIN 以键盘 EOF 信号结束后再尝试另一个 COPY FROM STDIN 时失败的问题

变更

在 psql 中,修复 COPY FROM STDIN 以键盘 EOF 信号结束后再尝试另一个 COPY FROM STDIN 时失败的问题(Thomas Munro)

这种错误行为在 BSD 衍生平台(包括 macOS)上观察到,但在大多数其他平台上没有。

关联记录 (4)
问题修复修复 pg_dump 和 pg_restore 把 REFRESH MATERIALIZED VIEW 命令放在最后发出

变更

修复 pg_dump 和 pg_restore 把 REFRESH MATERIALIZED VIEW 命令放在最后发出(Tom Lane)

这防止了物化视图引用其他用户拥有的表时转储/恢复期间的错误。

关联记录 (3)
改进改进 pg_dump/pg_restore 对源自 zlib 的错误情况的报告

变更

改进 pg_dump/pg_restore 对源自 zlib 的错误情况的报告(Vladimir Kunschikov、Álvaro Herrera)

关联记录 (2)
问题修复修复 pg_dump 使用 --clean 选项按预期删除事件触发器

变更

修复 pg_dump 使用 --clean 选项按预期删除事件触发器(Tom Lane)

它现在还正确分配事件触发器的所有权;此前它们被恢复为归运行恢复脚本的超级用户所有。

关联记录 (3)
问题修复修复 pg_dump 不再为空操作符类发出无效 SQL

变更

修复 pg_dump 不再为空操作符类发出无效 SQL(Daniel Gustafsson)

关联记录 (4)
问题修复修复 pg_dump 在 Windows 上输出到 stdout

变更

修复 pg_dump 在 Windows 上输出到 stdout(Kuntal Ghosh)

由于未把文件描述符置为二进制模式,写到 stdout 的压缩纯文本转储会包含损坏的数据。

关联记录 (4)
问题修复修复 pg_get_ruledef() 为列被重命名的视图的 ON SELECT 规则打印正确输出

变更

修复 pg_get_ruledef() 为列被重命名的视图的 ON SELECT 规则打印正确输出(Tom Lane)

某些边界情况下 pg_dump 依靠 pg_get_ruledef() 转储视图,因此这个错误可能导致转储/恢复失败。

关联记录 (4)
问题修复修复带空约束外连接(如没有公共列的 NATURAL LEFT JOIN 的结果)的转储

变更

修复带空约束外连接(如没有公共列的 NATURAL LEFT JOIN 的结果)的转储(Tom Lane)

关联记录 (3)
问题修复修复 FROM 子句中函数表达式不能反解析为看起来像函数调用的东西时的转储

变更

修复 FROM 子句中函数表达式不能反解析为看起来像函数调用的东西时的转储(Tom Lane)

关联记录 (4)
问题修复修复 pg_basebackup 在 Windows 上输出到 stdout

变更

修复 pg_basebackup 在 Windows 上输出到 stdout(Haribabu Kommi)

由于未把文件描述符置为二进制模式,写到 stdout 的备份会包含损坏的数据。

关联记录 (4)
问题修复修复 pg_rewind 正确处理超过 2GB 的文件

变更

修复 pg_rewind 正确处理超过 2GB 的文件(Kuntal Ghosh、Michael Paquier)

通常这种文件不会出现在 PostgreSQL 数据目录中,但在某些情况下可能存在。

关联记录 (1)
问题修复修复 pg_upgrade 确保结束 WAL 记录不具有wal_level = minimum

变更

修复 pg_upgrade 确保结束 WAL 记录不具有wal_level = minimum(Bruce Momjian)

这一条件可能阻止升级后的备库服务器重新连接。

关联记录 (4)
问题修复修复 pg_xlogdump 对 WAL 记录长度的计算

变更

修复 pg_xlogdump 对 WAL 记录长度的计算(Andres Freund)

关联记录 (1)
改进在 postgres_fdw 中,ALTER SERVER 或 ALTER USER MAPPING 命令之后重建到远程服务器的连接

变更

在 postgres_fdw 中,ALTER SERVER 或 ALTER USER MAPPING 命令之后重建到远程服务器的连接(Kyotaro Horiguchi)

这确保影响连接参数的选项更改被及时应用。

关联记录 (3)
改进在 postgres_fdw 中,允许取消远程事务控制命令

变更

在 postgres_fdw 中,允许取消远程事务控制命令(Robert Haas、Rafia Sabih)

这一更改使我们能在比以前多得多的情况下快速摆脱对无响应远程服务器的等待。

关联记录 (3)
改进增大 MAX_SYSCACHE_CALLBACKS,为扩展提供更多空间

变更

增大 MAX_SYSCACHE_CALLBACKS,为扩展提供更多空间(Tom Lane)

关联记录 (2)
改进用 gcc 构建共享库时始终使用 -fPIC 而不是 -fpic

变更

用 gcc 构建共享库时始终使用 -fPIC 而不是 -fpic(Tom Lane)

这在有差别的平台上支持更大的扩展库。

关联记录 (4)
问题修复修复我们的 Microsoft MSVC 构建脚本中花括号未转义的问题,以避免较新的 Perl 版本发出警告或报错

变更

修复我们的 Microsoft MSVC 构建脚本中花括号未转义的问题,以避免较新的 Perl 版本发出警告或报错(Andrew Dunstan)

关联记录 (3)
改进在 MSVC 构建中,处理 openssl 库不在 VC 子目录内的情况

变更

在 MSVC 构建中,处理 openssl 库不在 VC 子目录内的情况(Andrew Dunstan)

关联记录 (4)
改进在 MSVC 构建中,为 libxml2 头文件添加正确的包含路径

变更

在 MSVC 构建中,为 libxml2 头文件添加正确的包含路径(Andrew Dunstan)

这修复了以前需要移动标准 Windows 安装的 libxml2 中某些东西的需要。

关联记录 (4)
改进在 MSVC 构建中,识别名为 tcl86.lib 的 Tcl 库

变更

在 MSVC 构建中,识别名为 tcl86.lib 的 Tcl 库(Noah Misch)

关联记录 (4)
改进在 MSVC 构建中,尊重 vcregress.pl 命令行上的 PROVE_FLAGS 设置

变更

在 MSVC 构建中,尊重 vcregress.pl 命令行上的 PROVE_FLAGS 设置(Andrew Dunstan)

关联记录 (2)
如何生成比较结果?

比较依据起始版本之后至目标版本的 PostgreSQL 发布说明。经核实的回补重复项会谨慎合并,保留每条原始说明;相关提交可能涉及独立变化,仍作为不同记录保留。

发布快照: 2026-09-26 · 安全快照: 2026-09-26

内容来自 PostgreSQL 发布说明。交互方式参考 pgversions.com 与 pgversionreport.