E.23. 版本 9.5.3 #
发布日期:. 2016-05-12
此版本包含自 9.5.2 以来的多种修复。有关 9.5 大版本中新特性的信息,参见第 E.26 节。
E.23.2. 变更
在调用 OpenSSL 之前清空 OpenSSL 错误队列,而不是假设它已经为空;并确保调用之后也让它保持为空(Peter Geoghegan、Dave Vitek、Peter Eisentraut)
此变更可防止在单个进程内存在多条使用 OpenSSL 的连接、且相关代码并非全部遵循相同的错误队列清空规则时出现问题。特别是当客户端应用并发使用 libpq 的 SSL 连接和 PHP、Python 或 Ruby 的 OpenSSL 封装库的 SSL 连接时,已有失败报告。如果扩展模块建立外向 SSL 连接,服务器内部也可能出现类似问题。
修复左连接右侧包含全连接时规划器出现“failed to build any
N-way joins”错误的问题(Tom Lane)修复多层级 nestloop 计划中等价类测试的处理不正确的问题(Tom Lane)
对于三个或更多变量的等价类(例如
X.X = Y.Y = Z.Z),规划器可能遗漏一些确保所有变量确实相等的测试,导致输出不满足WHERE子句的连接行。由于种种原因,实践中很少选中错误的计划,因此这个 bug 长期未被发现。修复开启operator_precedence_warning时出现的边界解析失败(Tom Lane)
例如,
SELECT (ARRAY[])::text[]会报错,尽管不带括号时可以工作。修复 GIN 索引扫描中的查询生命周期内存泄漏(Julien Rouhaud)
修复 GIN 索引插入中的查询生命周期内存泄漏和潜在的索引损坏风险(Tom Lane)
在简单查询中,内存泄漏通常不会很大,但在以高
maintenance_work_mem构建大型 GIN 索引期间,泄漏可能非常可观。修复
to_timestamp()中TH、th和Y,YYY格式代码可能的错误行为(Tom Lane)这些代码可能越过输入字符串末尾,导致后续格式代码读取垃圾数据。
修复对这样的规则和视图的转储:
结构的valueoperatorANY (array)array参数是子 SELECT(Tom Lane)禁止
ALTER SYSTEM参数值中出现换行(Tom Lane)配置文件解析器不支持字符串字面量中的内嵌换行,因此我们不能允许
ALTER SYSTEM插入的值中包含换行。修复选择 OID 上的索引时
ALTER TABLE ... REPLICA IDENTITY USING INDEX无法正确工作的问题(David Rowley)避免移除表空间符号链接失败后可能的错误行为(Tom Lane)
修复对齐敏感平台上逻辑解码崩溃的问题(Tom Lane、Andres Freund)
该失败仅发生在事务大到需要溢出到磁盘、且该事务内发生主键更改的情况。
避免 walsender 关闭期间反复向接收器请求反馈(Nick Cleaton)
使 pg_regress 在设置了
PGCTLTIMEOUT环境变量时使用其中的启动超时(Tom Lane)这是为了与最近添加到 pg_ctl 的行为保持一致;它方便了在慢速机器上进行自动化测试。
修复 pg_upgrade 对仅包含一个操作符类的操作符族正确恢复扩展成员关系的问题(Tom Lane)
在这种情况下,操作符族会被恢复到新数据库中,但不再被标记为扩展的一部分。这没有直接的坏影响,但会导致后续 pg_dump 运行产生在恢复时引发(无害)错误的输出。
修复新集群 TOAST 规则与旧集群不同时 pg_upgrade 失败的问题(Tom Lane)
pg_upgrade 原有专门代码处理新 PostgreSQL 版本认为表应有 TOAST 表而旧版本认为没有的情况。该代码有问题,因此将其移除,在这种情况下改为不做任何处理;没有理由认为,如果按照旧版本的规则没有 TOAST 表也没问题,我们就无法在没有 TOAST 表的情况下正常运作。
修复使用 IBM XLC 编译器时 PPC 上的原子操作(Noah Misch)
减少配置了
--disable-spinlocks的构建所使用的 SysV 信号量数量(Tom Lane)把内部函数
strtoi()重命名为strtoint(),以避免与 NetBSD 库函数冲突(Thomas Munro)修复 Windows 上
bind()和listen()系统调用错误的报告(Tom Lane)减少使用 Microsoft Visual Studio 构建时编译器输出的冗长程度(Christian Ullrich)
支持使用 Visual Studio 2015 构建(Michael Paquier、Petr Jelínek)
注意,使用 VS2015 构建的版本不能在早于 Windows Vista 的 Windows 版本上运行。
修复
putenv()在 Visual Studio 2013 下的正确工作(Michael Paquier)避免可能不安全地使用 Windows 的
FormatMessage()函数(Christian Ullrich)在适当之处使用
FORMAT_MESSAGE_IGNORE_INSERTS标志。目前不知道这里存在实际的 bug,但小心谨慎似乎是明智的。把时区数据文件更新到 tzdata 2016d 版,涉及俄罗斯和委内瑞拉的夏令时法规变更。新增时区名称
Europe/Kirov和Asia/Tomsk,以反映这些地区现在与相邻地区有不同的时区历史。