pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
发布日期:. 2016-10-27
本发行版包含对 9.4.9 的多项修复。有关 9.4 主版本中新功能的信息,请参见第 E.27 节。
对于运行 9.4.X 的用户,不需要转储/恢复。
不过,如果你的安装受到下面第一条变更日志条目所述 bug 的影响,更新之后 你可能需要采取行动修复损坏的空闲空间映射。
另外,如果你是从 9.4.6 之前的版本升级,参见 第 E.21 节。
修复关系空闲空间映射和可见性映射截断的 WAL 记录 (Pavan Deolasee、Heikki Linnakangas)
这些文件有可能在崩溃恢复期间未被正确恢复,或者在备库服务器上被错误 写入。空闲空间映射中的虚假条目可能导致访问已从关系中截断掉的页, 通常产生诸如 “could not read block XXX: read only 0 of 8192 bytes” 的错误。如果启用了校验和,可见性映射中的校验和失败也是可能的。
判断是否存在问题以及如何修复的程序在 https://wiki.postgresql.org/wiki/Free_Space_Map_Problems 中讨论。
修复在大端机器上 GIN 索引 WAL 记录创建不正确的问题(Tom Lane)
典型症状是 WAL 重放期间出现“unexpected GIN leaf action”错误。
修复 SELECT FOR UPDATE/SHARE,使其正确锁定已被随后中止的事务更新过的元组(Álvaro Herrera)
在 9.5 及之后的版本中,SELECT 有时可能完全不返回此类元组。虽然尚未证明在更早的版本中会发生失败,但在并发更新的情况下是有可能的。
修复涉及 CTE 扫描的 EvalPlanQual 重新检查(Tom Lane)
重新检查总是把 CTE 视为不返回任何行,通常导致无法更新最近已更新的行。
修复子查询中哈希聚合不当重复先前结果的问题(Andrew Gierth)
判断能否复用先前计算的聚合状态值哈希表的测试,忽略了聚合参数表达式中出现外层查询引用的可能性。这种引用的值发生变化时本应重新计算哈希表,但实际没有。
修复对带 PRIMARY KEY 或 REPLICA IDENTITY 索引的表执行批量 UPDATE 时的查询生命周期内存泄漏(Tom Lane)
修复 track_io_timing 打开时 EXPLAIN 发出有效 XML(Markus Winand)
此前 XML 输出格式选项产生语法无效的标记,如 <I/O-Read-Time>。现在它被渲染为 <I-O-Read-Time>。
抑制在 EXPLAIN 中为未测量的时间打印零值(Maksim Milyutin)
某些选项组合会为在该组合下实际上从不测量的时间打印零值。EXPLAIN 的一般策略是完全不打印此类字段,因此在所有情况下都保持一致。
修复 VACUUM 为截断表而等待排他表锁时的超时长度(Simon Riggs)
该超时本应为 50 毫秒,但实际上只有 50 微秒,导致 VACUUM 比预期更容易放弃截断。将其设置为预期值。
修复创建或更改表时合并继承 CHECK 约束的 bug (Tom Lane、Amit Langote)
允许以任一顺序向父表和子表添加相同的 CHECK 约束。 防止父表的有效约束与子表的 NOT VALID 约束合并。 同样防止 NO INHERIT 子约束与继承约束合并。
移除对 numeric_in() 和 numeric_recv() 所接受值的人为限制(Tom Lane)
我们允许数值达到存储格式的极限(超过 1e100000),因此 numeric_in() 拒绝科学计数法指数超过 1000 的做法相当无意义。同样,numeric_recv() 拒绝输入值超过 1000 位数字也很荒谬。
避免因未持有缓冲区锁测试元组可见性而导致的极低概率数据损坏 (Thomas Munro、Peter Geoghegan、Tom Lane)
修复子事务的 WAL 输出大到足以溢出到磁盘时逻辑 WAL 解码的正常工作 (Andres Freund)
修复逻辑 WAL 解码中的缓冲区过度读取(Tom Lane)
元组更新记录的逻辑解码会多读取 23 个字节,这通常无害,但运气极差时可能导致崩溃。
修复截断超过 1GB 的临时关系时文件描述符泄漏的问题(Andres Freund)
禁止在启用 standby_mode 的情况下启动独立后端(Michael Paquier)
这不可能有任何用处,因为不会有 WAL 接收器进程来获取更多 WAL 数据;而且这可能导致未针对此种情况设计的代码出现不当行为。
在回收先前使用过的复制槽时正确初始化其状态(Michael Paquier)
未重置槽的所有字段可能阻止 VACUUM 移除死元组。
在 Linux 上尝试使用大页时,把共享内存分配请求舍入到实际大页大小的 整数倍(Tom Lane)
这避免了在默认大页大小非典型的系统上 munmap() 期间可能的失败。除崩溃恢复情况外, 除了日志消息之外没有不良影响。
为动态共享内存控制段的 ID 使用更随机的值(Robert Haas、Tom Lane)
以前每次都会选择相同的值,因为它派生自 random(),而 srandom() 尚未被调用。虽然相对无害,但这不是预期行为。
在 Windows 上,动态共享内存控制段创建遇到访问拒绝错误后重试(Kyotaro Horiguchi、Amit Kapila)
当段已存在时,Windows 有时返回 ERROR_ACCESS_DENIED 而不是 ERROR_ALREADY_EXISTS。这导致系统认为前者是不可恢复的错误,从而使 postmaster 启动失败。
不要在 libpq 中跨多个连接共享 SSL 上下文 (Heikki Linnakangas)
这导致了各种边界情况 bug,特别是当尝试对不同连接使用不同 SSL 参数时。
避免 libpq 中的边界情况内存泄漏 (Tom Lane)
报告的问题涉及 PQreset() 期间泄漏错误报告,但 可能有相关情况。
使 ecpg 的 --help 和 --version 选项与其他可执行程序保持一致(Haribabu Kommi)
修复 pgbench 平均延迟的计算(Fabien Coelho)
当脚本中存在 \sleep 命令,或者测试时长以事务数而非总时间指定时,计算是不正确的。
在 pg_dump 中,永不转储范围构造函数(Tom Lane)
这一疏漏导致包含范围类型的扩展在 pg_upgrade 时因重复创建构造函数而失败。
在 pg_xlogdump 中,使用 --follow 选项时重试打开新的 WAL 段 (Magnus Hagander)
这考虑到服务器创建下一段的可能延迟。
修复 pg_xlogdump 处理以跨越多页的续页记录开头的 WAL 文件的问题(Pavan Deolasee)
修复 contrib/pg_buffercache 在 shared_buffers 超过 256GB 时的工作问题(KaiGai Kohei)
修复 contrib/intarray/bench/bench.pl,使其在给定 -e 选项时打印它执行的 EXPLAIN 的结果(Daniel Gustafsson)
安装 TAP 测试基础设施,使其可用于扩展测试(Craig Ringer)
当 PostgreSQL 配置了 --enable-tap-tests 时,“make install” 现在会把 TAP 测试的 Perl 支持文件安装到 PGXS 能找到的位置。这允许非核心扩展使用 $(prove_check) 而无需额外测试。
在 MSVC 构建中,把 pg_recvlogical 包含在仅客户端安装中(MauMau)
更新 Windows 时区映射,以识别较新 Windows 版本中新增的一些时区名称(Michael Paquier)
防止已过时的动态时区缩写失效(Tom Lane)
如果动态时区缩写与所引用时区中的任何条目都不匹配,就把它视为等效于该时区名称。这避免了当 IANA 从其时区数据库中移除缩写时出现意外失败——他们在 tzdata 2016f 版中就这样做过,而且将来可能再次这样做。后果不仅限于无法识别单个缩写;任何不匹配都会导致 pg_timezone_abbrevs 视图完全失败。
更新时区数据文件到 tzdata 版本 2016h,涉及 巴勒斯坦和土耳其的夏令时法规变更,加上土耳其和俄罗斯一些地区的 历史修正。南极洲、前苏联和斯里兰卡的一些时区改用数字缩写。
IANA 时区数据库以前为所有时区提供文本缩写,有时编造在当地居民中 几乎或完全没有使用的缩写。他们正在逆转这一政策,改为在没有证据 表明实际使用英文缩写的区域使用数字 UTC 偏移。至少目前, PostgreSQL 将继续接受这种被移除的缩写 用于时间戳输入。但它们不会显示在 pg_timezone_names 视图中,也不用于输出。
在此更新中,AMT 不再显示为表示亚美尼亚时间。因此 我们把 Default 缩写集改为把它解释为亚马逊时 间,即 UTC-4 而不是 UTC+4。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。