ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# E.48\. 发布8.4.5 > **发布日期:** 2010-10-04 该发布包含来自8.4.4中的各种修复。 关于8.4主要版本的新功能的各种信息,参阅[Section E.53](#calibre_link-49)。 ## E.48.1\. 迁移到版本8.4.5 运行8.4.X不需要备份/恢复。然而,如果你从8.4.2的早期版本升级, 参阅8.4.2的发布说明。 ## E.48.2\. 变化 * 为每个调用PL/Perl和PL/Tcl中SQL userid使用独立解释器(Tom Lane) 这种变化可以防止通过颠覆随后在同一会话中另一个SQL用户身份下执行的Perl或Tcl代码造成的安全问题 (例如,在`SECURITY DEFINER`函数中)。 大多数的脚本语言提供了可以执行的众多方法, 如重新定义标准函数或目标函数运算符。没有这种变化的话,任何拥有Perl或Tcl语言使用权的SQL用户 可以执行拥有目标函数所有者的SQL权限应该做的事情。 这种变化的成本是在Perl和Tcl函数之间沟通意图变得更加困难。 为了提供一个逃生出口,PL/PerlU和PL/TclU函数继续每个会话中仅仅使用一个解释器。 这没有考虑安全问题,因为在数据库超级用户的信任级别上执行所有这些函数。 可能声称提供可信执行程序的第三方程序语言有类似的安全问题。 我们建议你依赖安全关键用途联系任何PL的作者。 我们应该感谢Tim Bunce提出这个问题(CVE-2010-3433)。 * 防止`pg_get_expr()`中可能的事故, 通过禁止适合与不是一个系统目录列之一的参数一起使用。(Heikki Linnakangas, Tom Lane) * 处理退出代码128(`ERROR_WAIT_NO_CHILDREN`)作为Windows上非致命的(Magnus Hagander) 在高负荷的情况下,Windows进程在使用错误码启动过程失败。 之前postmaster把这个看作恐慌条件并且重新启动整个数据库,但这似乎是反应过度。 * 修复占位符赋值不正确位置(Tom Lane) 当它们本应是空的时候,这个错误可能导致查询输出非空。 在该情况下,输出列表非严格的表达式下外部连接的内部是一个子选择。 * 修复`UNION ALL`成员关系可能的重复扫描(Tom Lane) * 修复"不能处理非计划子查询"错误(Tom Lane) 当包含连接别名参考的子查询扩展到含有另一个子选择的表达式中时,发生这种情况。 * 修复引用视图或出现在嵌套子查询中的子选择的整列变量的不当处理(Tom Lane) * 修复交叉类型`IN`比较的处理不当(Tom Lane) 如果规划器试图实现使用分类然后唯一的完全连接计划的`IN`连接。 * 修复统计`tsvector`列的`ANALYZE`的计算(Jan Urbanski) 最初代码可以产生不正确统计,导致之后错误规划选择。 * 优化通过`array_agg()`, `string_agg()`和类似聚合函数使用的内存的规划器估计(Hitoshi Harada) 以往过低估计可以导致内存不足错误,由于哈希聚集规划不恰当的选择。 * 修复标记缓存计划是短暂的错误(Tom Lane) 当`CREATE INDEX CONCURRENTLY`在进展中作为一个参考表,如果已准备好一个规划, 一旦索引是现成的,它应该重新被规划。这是不会发生的。 * 在一些偶然报道btree失败的案例中减少PANIC到ERROR, 并提供产生错误信息中的额外的细节。 这可以优化使用错误索引的系统的鲁棒性。 * 修复GIN索引部分匹配查询的错误搜索逻辑(Tom Lane) 涉及一些GIN索引条件的AND/OR组合情况不总是给出正确答案, 有时候比必要情况慢的多。 * 防止autovacuum进程中show_session_authorization()的崩溃(Tom Lane) * 并不是所有返回行都是同一rowtype的地方防范函数返回集合记录(Tom Lane) * 修复在子事务回滚期间待定触发器事件列表的可能损坏(Tom Lane) 这可能导致崩溃或者错误触发触发器。 * 当散列按引用传递函数结果时,修复可能错误(Tao Ma, Tom Lane) * 优化join列中NULL的合并连接处理(Tom Lane) 如果排序顺序是NULL排序高,那么合并连接可以完全停止到达第一个NULL。 * 当写入它们时,注意fsync锁文件内容(`postmaster.pid`和socket锁文件)(Tom Lane) 如果在postmaster启动之后不久该机器崩溃,那么该忽略可能导致损坏的锁文件内容。 反过来又可以防止后续尝试启动postmaster,直到手动删除锁定文件。 * 当分配XID给严重嵌套子事务时,避免递归(Andres Freund, Robert Haas) 如果有有限的堆栈空间,初始编码可能导致崩溃。 * 避免在walwriter过程中保持开放旧的WAL段(Magnus Hagander, Heikki Linnakangas) 先前编码可以防止删除不再需要部分。 * 修复`log_line_prefix`'s `%i`逃逸,这在 后台启动早期时会产生垃圾(Tom Lane) * 避免为TOAST表部分指定的关系选项的曲解(Itagaki Takahiro) 特别是,`fillfactor`会被读为零, 如果任何其他reloption已经为该表设置,导致严重的膨胀。 * 修复`ALTER TABLE ... ADD CONSTRAINT`中继承计数跟踪(Robert Haas) * 当启用归档时,修复`ALTER TABLE ... SET TABLESPACE`中可能的数据损坏(Jeff Davis) * 允许`CREATE DATABASE`和`ALTER DATABASE ... SET TABLESPACE` 被查询取消中断(Guillaume Lelarge) * 改善`CREATE INDEX`对被推荐索引表达式是否可以改变的检测(Tom Lane) * 修复`REASSIGN OWNED`以处理算子类和族(Asko Tiidumaa) * 当比较两个空的`tsquery`值的时候,修复可能的核心转储(Tom Lane) * 修复模式中包含`%`伴随`_`的`LIKE`的处理(Tom Lane) 我们之前已经修复,但是仍存在一些不正确处理的情况。 * 重新允许Julian日期输入追溯到0001-01-01 AD (Tom Lane) 在8.4之前输入比如`'J100000'::date`,但是通过添加的错误检查无意打破。 * 如果在遍历游标的`FOR`循环中关闭游标,修复PL/pgSQL抛出一个错误,不会崩溃。 * 在PL/Python中,抵御来自`PyCObject_AsVoidPtr`和`PyCObject_FromVoidPtr` 的空指针结果(Peter Eisentraut) * 在libpq中,当指定`host`和`hostaddr`的时候,修复 完整SSL证书验证。 * 使得psql将`DISCARD ALL`看做在自动提交关闭模式中不应该封装在事务块中的命令(Itagaki Takahiro) * 修复SQL/MED对象pg_dump的处理中的一些问题(Tom Lane) 值得注意的是,如果通过非超级用户执行,pg_dump总是失败, 它并不打算这样。 * 优化非可查找归档文件的pg_dump和pg_restore的处理(Tom Lane, Robert Haas) 对于并行转储的正常运作很重要。 * 提高并行pg_restore处理选择性转储(`-L` option)的能力(Tom Lane) 如果`-L`文件命令非缺省转储顺序,那么原代码可能失败。 * 修复ecpg正确处理来自`RETURNING`子句的数据(Michael Meskes) * 修复ecpg中的一些内存泄露(Zoltan Boszormenyi) * 优化包含已删除列的表的`contrib/dblink`的处理(Tom Lane) * 修复`contrib/dblink`中"重复连接名"错误之后的连接泄露(Itagaki Takahiro) * 修复`contrib/dblink`以正确处理超过62字节的连接名(Itagaki Takahiro) * 添加`hstore(text, text)`函数到`contrib/hstore` (Robert Haas) 该函数是为了现在不使用的`=>`操作符的推荐替代者。 它后面打补丁,以便适应未来代码可用于旧的服务器版本。 请注意,该补丁仅仅在安装`contrib/hstore`或 重新安装在一个特定的数据库中有效。 用户可能更愿意手动执行`CREATE FUNCTION`命令来代替。 * 更新基础设施建设和文档以反映来自CVS到Git的源代码存储库的移动(Magnus Hagander and others) * 为了Egypt和Palestine中DST变化规律更新时区数据文件到tzdata发布2010l; 也是出于Finland的历史修正。 这种变化还为两个Micronesian时区添加了新的名字:Pacific/Chuuk目前优于Pacific/Truk(并且首选缩写是CHUT而不是TRUT) 并且Pacific/Pohnpei优于Pacific/Ponape。 * 使得Windows的"N. Central Asia Standard Time"时区映射到Asia/Novosibirsk,而不是Asia/Almaty (Magnus Hagander) Microsoft改变来自KB976098的时区更新中的该区域的DST操作。 Asia/Novosibirsk是对于新操作的更好匹配。