E.1. 版本 9.1.24 #
发行日期
2016-10-27
本次发布包含对 9.1.23 的多方面修复。有关 9.1 大版本中新特性的信息,请参见第 E.25 节。.
这预计是 PostgreSQL 9.1.X 系列的最后一个发行版。建议用户尽快更新到较新的发行分支。
E.1.2. 变更
修复涉及 CTE 扫描的 EvalPlanQual 重新检查(Tom Lane)
重新检查总是把 CTE 视为不返回任何行,通常导致无法更新最近已更新的行。
修复子查询中哈希聚合不当重复先前结果的问题(Andrew Gierth)
判断能否复用先前计算的聚合状态值哈希表的测试,忽略了聚合参数表达式中出现外层查询引用的可能性。这种引用的值发生变化时本应重新计算哈希表,但实际没有。
修复
VACUUM为截断表而等待排他表锁时的超时长度(Simon Riggs)该超时本应为 50 毫秒,但实际上只有 50 微秒,导致
VACUUM比预期更容易放弃截断。将其设置为预期值。移除对
numeric_in()和numeric_recv()所接受值的人为限制(Tom Lane)我们允许数值达到存储格式的极限(超过
1e100000),因此numeric_in()拒绝科学计数法指数超过 1000 的做法相当无意义。同样,numeric_recv()拒绝输入值超过 1000 位数字也很荒谬。避免因未持有缓冲区锁测试元组可见性而导致的极低概率数据损坏(Thomas Munro、Peter Geoghegan、Tom Lane)
修复截断超过 1GB 的临时关系时文件描述符泄漏的问题(Andres Freund)
禁止在启用
standby_mode的情况下启动独立后端(Michael Paquier)这不可能有任何用处,因为不会有 WAL 接收器进程来获取更多 WAL 数据;而且这可能导致未针对此种情况设计的代码出现不当行为。
不要在 libpq 中跨多个连接共享 SSL 上下文(Heikki Linnakangas)
这导致了各种边界情况 bug,特别是当尝试对不同连接使用不同 SSL 参数时。
避免 libpq 中的边界情况内存泄漏(Tom Lane)
报告的问题涉及
PQreset()期间泄漏错误报告,但可能有相关情况。使 ecpg 的
--help和--version选项与其他可执行程序保持一致(Haribabu Kommi)修复
contrib/intarray/bench/bench.pl,使其在给定-e选项时打印它执行的EXPLAIN的结果(Daniel Gustafsson)防止已过时的动态时区缩写失效(Tom Lane)
如果动态时区缩写与所引用时区中的任何条目都不匹配,就把它视为等效于该时区名称。这避免了当 IANA 从其时区数据库中移除缩写时出现意外失败——他们在 tzdata 2016f 版中就这样做过,而且将来可能再次这样做。后果不仅限于无法识别单个缩写;任何不匹配都会导致
pg_timezone_abbrevs视图完全失败。更新时区数据文件到 tzdata 版本 2016h,涉及巴勒斯坦和土耳其的夏令时法规变更,加上土耳其和俄罗斯一些地区的历史修正。南极洲、前苏联和斯里兰卡的一些时区改用数字缩写。
IANA 时区数据库以前为所有时区提供文本缩写,有时编造在当地居民中几乎或完全没有使用的缩写。他们正在逆转这一政策,改为在没有证据表明实际使用英文缩写的区域使用数字 UTC 偏移。至少目前,PostgreSQL 将继续接受这种被移除的缩写用于时间戳输入。但它们不会显示在
pg_timezone_names视图中,也不用于输出。在此更新中,
AMT不再显示为表示亚美尼亚时间。因此我们把Default缩写集改为把它解释为亚马逊时间,即 UTC-4 而不是 UTC+4。