pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
发布日期:. 2015-02-05
本发行版包含对 9.4.0 的多项修复。有关 9.4 主版本中新功能的信息,请参见第 E.27 节。
对于运行 9.4.X 的用户,不需要转储/恢复。
但是,如果你是 Windows 用户且使用“Norwegian (Bokmål)”区域,升级后需要手工将PostgreSQL系统目录中存储的任何“Norwegian (Bokmål)_Norway”或“norwegian-bokmal”区域名替换为纯 ASCII 别名“Norwegian_Norway”。详情参见http://wiki.postgresql.org/wiki/Changes_To_Norwegian_Locale
修复to_char()中的缓冲区越界(Bruce Momjian)
当to_char()处理要求数字位数很多的数字格式模板时,PostgreSQL会读取越过缓冲区末尾。当处理恶意构造的时间戳格式模板时,PostgreSQL会写入越过缓冲区末尾。两种情况都可能导致服务器崩溃。我们尚未排除导致权限提升攻击的可能性,尽管这种攻击似乎不太可能。(CVE-2015-0241)
修复替换实现的*printf()函数中的缓冲区越界(Tom Lane)
PostgreSQL包含printf及相关函数的替换实现。当代码格式化浮点数(转换说明符e、E、f、F、g或G)且请求的精度超过约 500 时,会发生栈缓冲区越界。这会导致服务器崩溃,我们尚未排除导致权限提升攻击的可能性。数据库用户可以通过to_char()SQL 函数触发这种缓冲区越界。虽然这是唯一受影响的核心PostgreSQL功能,但使用 printf 族函数的扩展模块也可能存在风险。
此问题主要影响 Windows 上的PostgreSQL。PostgreSQL在系统实现足够完善时会使用系统实现,而其他现代平台上正是如此。(CVE-2015-0242)
修复contrib/pgcrypto中的缓冲区越界(Marko Tiikkaja、Noah Misch)
pgcrypto模块中内存大小跟踪的错误导致了栈缓冲区越界和对未初始化内存内容的不当依赖。缓冲区越界情况可能导致服务器崩溃,我们尚未排除导致权限提升攻击的可能性。(CVE-2015-0243)
修复出错后前端/后端协议可能失去同步的问题(Heikki Linnakangas)
如果服务器在从客户端读取协议消息中途发生任何错误,它可能失去同步,错误地把消息数据的一部分解释为新的协议消息。能够在命令参数中提交恶意构造二进制数据的攻击者可能借此注入自己的 SQL 命令。语句超时和查询取消是触发此场景最可能的错误来源。尤其容易受影响的是既使用超时又将任意用户构造数据作为二进制查询参数提交的应用程序。禁用语句超时会降低但不能消除被利用的风险。感谢 Emil Lenngren 报告此问题。(CVE-2015-0244)
修复通过约束违反错误消息的信息泄露(Stephen Frost)
某些服务器错误消息会显示违反约束(如唯一约束)的列的值。如果用户对该表的所有列没有SELECT权限,这可能意味着暴露用户不应看到的值。我们调整了代码,使值仅在来自 SQL 命令本身或用户可以查询到时才显示。(CVE-2014-8161)
锁定 Windows 上回归测试的临时安装(Noah Misch)
使用 SSPI 认证,只允许启动测试套件的操作系统用户连接。这在 Windows 上关闭了此前已在其他平台上关闭的同一漏洞,即其他用户可能连接到测试 postmaster。(CVE-2014-0067)
处理名为“Norwegian (Bokmål)”的 Windows 区域(Heikki Linnakangas)
非 ASCII 区域名是有问题的,因为不清楚应该用什么编码表示它们。将这个麻烦的区域名映射为纯 ASCII 别名“Norwegian_Norway”。
9.4.0 曾将这个麻烦的名称映射为“norwegian-bokmal”,但事实证明这并非在所有 Windows 配置上都有效。现在改为推荐“Norwegian_Norway”。
修复 EvalPlanQual 处理中使用已释放内存的问题(Tom Lane)
在READ COMMITTED模式下,锁定或更新最近更新过的行的查询可能因此缺陷崩溃。
避免在 EvalPlanQual 处理中试图获取元组锁时可能出现的死锁(Álvaro Herrera、Mark Kirkwood)
修复当某事务试图获取 FOR NO KEY EXCLUSIVE 元组锁而多个其他事务当前持有 FOR SHARE 锁时不等待的问题(Álvaro Herrera)
改进 EXPLAIN 在大型范围表上的性能(Tom Lane)
修复jsonb的 Unicode 转义处理,并因此禁止\u0000(Tom Lane)
此前,JSON Unicode 转义\u0000被接受并按这六个字符存储;但这与输入\\u0000时存储的内容无法区分,造成歧义。此外,在期望得到去转义文本输出的场合(如->>操作符),该序列被打印为\u0000,不符合去除 JSON 转义的预期。(一致的行为需要输出零字节,但PostgreSQL不支持文本字符串中嵌入零字节。)9.4.0 中曾有一次不明智的尝试,试图通过调整 JSON 输出转换规则来改善这一状况;但这当然无法修复根本性的歧义,而且事实证明它破坏了 Unicode 转义序列的其他用法。我们撤销了那项修改,并为避免核心问题,在jsonb输入中拒绝\u0000。
如果jsonb列包含 9.4.0 存储的\u0000值,此后它将被读出为\\u0000,这是 9.4.0 为这种情况存储的数据的另一种有效解释。
json类型没有存储歧义问题,但确实存在去转义文本输出不一致的问题。因此,当需要转换为去转义形式时,json值中的\u0000现在也会被拒绝。此变更并不破坏在json列中存储\u0000的能力,只要不对这些值做任何处理。这与数据库编码不是 UTF8 时允许非 ASCII Unicode 转义的情况完全类似。
修复xpath()中的命名空间处理(Ali Akbar)
此前,如果命名空间声明附在输入xml值的祖先元素上而非被返回的特定元素上,xpath()调用产生的xml值就不会包含命名空间声明。我们将祖先声明传播下来,使结果在孤立考虑时也是正确的。
修复范围操作符选择率估计中的各种疏漏(Emre Hasegeli)
此补丁修复了极端情况下 “unexpected operator NNNN” 规划器错误,并改进了其他一些情况下的选择率估计。
恢复 GIN 索引项最大大小曾被无意间造成的缩减(Heikki Linnakangas)
对于以前版本会接受的数据,9.4.0 可能报 “index row size exceeds maximum” 错误而失败。
修复重复重新扫描 GIN 索引期间查询时长的内存泄漏(Heikki Linnakangas)
修复使用非零 gin_fuzzy_search_limit 时可能崩溃的问题(Heikki Linnakangas)
针对逻辑解码的多项修复(Andres Freund)
修复报告 wal_log_hints 设置变更的 WAL 参数变更记录的不正确重放(Petr Jelinek)
将 “pgstat wait timeout” 警告消息改为 LOG 级别,并重新措辞使其更易理解(Tom Lane)
这条消息最初被认为基本属于不可能发生的情况,但它在我们较慢的 buildfarm 成员上出现得足够频繁,成了干扰。现已将其降为 LOG 级别,并在措辞上多下了一点功夫:现在它的内容为 “using stale statistics instead of current ones because stats collector is not responding”。
当 macOS 的 setlocale() 在 postmaster 内部启动多余的额外线程时发出警告(Noah Misch)
修复 /etc/passwd 不可读时 libpq 的行为(Tom Lane)
在执行 PQsetdbLogin() 期间,libpq 会试图确定用户的操作系统用户名,在大多数 Unix 平台上这需要读取 /etc/passwd。从 9.4 起,读取失败被视为硬错误。现已恢复以前的行为:只有当应用程序未提供要连接的数据库角色名时才失败。这支持在缺少 /etc/passwd 文件的 chroot 环境中运行。
改进 psql 特殊变量解析的一致性(Tom Lane)
允许 ECHO_HIDDEN 和 ON_ERROR_ROLLBACK 使用 on 和 off 的变体拼写(如 1/0)。对 COMP_KEYWORD_CASE、ECHO、ECHO_HIDDEN、HISTCONTROL、ON_ERROR_ROLLBACK 和 VERBOSITY 的无法识别的值发出警告。对所有这些变量的所有值进行不区分大小写的识别;此前大小写敏感与不敏感的行为混杂在一起。
修复 pg_dump 使其处理事件触发器上的注释时不失败(Tom Lane)
允许并行 pg_dump 使用 --serializable-deferrable(Kevin Grittner)
防止备库提升为主库后 pg_basebackup -x/-X 创建的 WAL 文件被再次归档(Andres Freund)
安全地处理 contrib/tablefunc 的 connectby() 中的意外查询结果,尤其是 NULL(Michael Paquier)
此前 connectby() 遇到 NULL 键值时会崩溃。现在它会打印该行但不再进一步递归。
大量清理 Coverity 静态代码分析器的警告(Andres Freund、Tatsuo Ishii、Marko Kreen、Tom Lane、Michael Paquier)
这些变更大多只是表面性的,但在某些情况下修复了极端情况的缺陷,例如内存不足失败后崩溃而不是正确报告错误。据信它们都不构成安全问题。
允许 configure 环境中的 CFLAGS 覆盖自动提供的 CFLAGS(Tom Lane)
此前,configure 会把它自行选择的开关追加到用户指定的 CFLAGS 字符串末尾。由于大多数编译器从左到右处理开关,这意味着发生冲突时 configure 的选择会覆盖用户指定的标志。正确的方向应当相反,因此调整了逻辑,把用户的字符串放在末尾而不是开头。
使 pg_regress 成功退出时删除其创建的任何临时安装(Tom Lane)
这使 make check-world 期间的磁盘空间用量大幅减少,因为该序列会创建大量临时安装。
将 CST(中国标准时间)加入我们的时区缩写列表(Tom Lane)
将时区数据文件更新到 tzdata 发行版 2015a,涵盖智利和墨西哥的夏令时法规变更,以及冰岛的历史变更。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。