E.51. 发布8.4.2

发布日期: 2009-12-14

该发布包含来自8.4.1的各种修复。关于8.4主要发布中的新特性信息, 参阅Section E.53

E.51.1. 迁移到版本8.4.2

运行8.4.X不需要备份/恢复。然而,如果有任何散列索引,在更新到8.4.2之后你应该 REINDEX它们,以修复可能受损。

E.51.2. 变化

  • 防止通过索引函数改变会话局部状态引起的间接安全威胁(Gurjeet Singh, Tom)

    这一变化防止不变的索引函数打断超级用户会话(CVE-2009-4136)。

  • 拒绝在普通名字(CN)字段中包含嵌入的空字节的SSL证书(Magnus)

    这避免在SSL认证期间来自服务器或者客户端名字的证书的意外匹配(CVE-2009-4034)。

  • 修复散列索引损坏(Tom)

    该8.4变化使得散列索引保持通过散列值未能更新大量分裂和紧缩程序以保持排序的项。 所以这些操作的任何应用程序可能导致索引的永久性损坏,在这个意义上, 搜索可能无法找到存在的项。为了处理这个,推荐你已安装此更新后REINDEX任何散列索引。

  • 修复后台启动时缓存初始化期间可能崩溃(Tom)

  • 避免空的同义词词典崩溃(Tom)

  • 避免在不安全时间中断VACUUM信号(Alvaro)

    如果已经坚定元组动作之后取消了VACUUM FULL,该修复阻止PANIC。 如果在截断该表之后中断普通的VACUUM,阻止瞬态错误。?

  • 由于在哈希表大小计算中整数溢出,修复可能崩溃(Tom)

    这可能发生大的规划器评估哈希连接结果。

  • 如果在内部依赖对象上尝试DROP,修复崩溃(Tom)

  • 修复inet/cidr比较中稀少崩溃现象(Chris Mikkelson)

  • 确保不忽略通过预备事务持有的共享元组级别锁(Heikki)

  • 修复用于在子事务中访问的游标临时文件的提早删除(Heikki)

  • 当旋转到新的CSV日志文件时,修复syslogger处理中内存泄露(Tom)

  • 当重新解析pg_hba.conf的时候,修复postmaster中的内存泄露(Tom)

  • 修复Windows权限下降逻辑(Jesse Morris)

    这修复了数据库在Windows上启动失败的一些情况, 通常带有误导性错误信息比如"不能定位匹配postgres可执行程序"。

  • 使得在主查询中FOR UPDATE/SHARE不扩大到WITH查询中(Tom)

    比如,在

    WITH w AS (SELECT * FROM foo) SELECT * FROM w, bar ... FOR UPDATE
    

    FOR UPDATE将影响bar而不是foo。 这比原来8.4操作更有用而且更加一致, 尝试扩散FOR UPDATEWITH查询中, 但是却总是失败,因为匹配实现限制。它也遵循设计规则,如果主查询独立,执行WITH查询。

  • 修复在另外一个中使用WITH RECURSIVE查询的错误(Tom)

  • 修复散列索引的并发错误(Tom)

    并发插入可能导致索引扫描瞬时报告错误结果。

  • 当分割取决于索引的非首列时,修复GiST索引页分割错误逻辑(Paul Ramsey)

  • 修复为多列GIN索引使用fastupdate激活的错误搜索结果(Teodor)

  • 修复GIN索引WAL项创建中的错误(Tom)

    full_page_writes为on的时候,这些错误被隐藏,但是如果在下一个检查点之前发生崩溃, 那么关闭WAL回放错误是一定的。

  • 如果在检查点结尾回收或者删除旧的WAL文件失败,不要出错误(Heikki)

    更好地将这个问题作为非致命性的并且允许完成检查点。未来的检查点将重试取消。 这样的问题没有预期的正常运行,但通过错误设计Windows杀毒和备份软件造成的。

  • 确保Windows上WAL文件不再被重复归档(Heikki)

    如果其他过程干扰不再需要的文件的删除,这可能发生另外一种情况。

  • 修复PAM密码处理更加鲁棒性(Tom)

    上面的代码伴随着Linux pam_krb5 PAM模块与作为域控制器的Microsoft动态目录结合而失败。 它可能还有其他问题,因为它采用关于PAM堆栈传递给它什么参数的不合理假设。

  • 提高GSSAPI和SSPI认证方法中最大认证令牌(Kerberos ticket)大小(Ian Turner)

    当为Unix Kerberos 实现有足够多的旧的2000字节限制时, 通过Windows 域控制器发出标签可以更大。

  • 确保域约束在ARRAY[...]::domain结构中被强制,其中域不在数值类型中(Heikki)

  • 修复为涉及复合类型列作为外键的情况中的外键逻辑(Tom)

  • 确保游标的快照在被创建后不被修改(Alvaro)

    如果在同一事务中后续操作修改数据,这可能导致游标传递错误结果,应该返回游标。

  • 修复CREATE TABLE以正确合并来自不同继承父表的缺省表达式(Tom)

    这用于运行,但在8.4中被损坏。

  • 重新启用序列访问统计收集(Akira Kurosawa)

    这用于运行,但在8.3中被损坏。

  • 修复CREATE OR REPLACE FUNCTION中所有依赖的处理(Tom)

  • 修复WHERE``_x_=_x_条件的错误处理(Tom)

    在某些情况下,可以作为冗余忽略,但是它们不是— 它们等价于_x_ IS NOT NULL

  • 当为文本相同易变表达式使用哈希聚合实现DISTINCT的时候, 修复不正确规划结构(Tom)

  • 修复易变SELECT DISTINCT ON表达式的断言错误(Tom)

  • 修复ts_stat()而在空的tsvector值上不失败(Tom)

  • 使得文本搜索解析器接受XML属性中下划线(Peter)

  • 修复xml二进制输入中编码处理(Heikki)

    如果XML头没有指定编码,我们现在假设缺省UTF-8;先前处理是不一致的。

  • 修复从plperlu调用plperl的错误,反之亦然(Tom)

    从内部函数退出的错误可能导致崩溃,由于该错误为外部函数重新选择正确的Perl解释器。

  • 当重新定义PL/Perl函数的时候,修复会话存在期内存泄露(Tom)

  • 当通过集合返回PL/Perl函数返回时,确保Perl数组正确转换为PostgreSQL数组(Andrew Dunstan, Abhijit Menon-Sen)

    这些正常运行都为了非集合返回函数。

  • 修复PL/Python中异常处理的罕见崩溃(Peter)

  • 修复DECLARE CURSOR语句中注释的ecpg问题(Michael)

  • 修复ecpg不把最近添加的关键字作为保留字(Tom)

    这影响了关键字CALLED, CATALOG, DEFINER, ENUM, FOLLOWING, INVOKER, OPTIONS, PARTITION, PRECEDING, RANGE, SECURITY, SERVER, UNBOUNDEDWRAPPER

  • 重新允许psql的\df函数名字参数中的正则表达式特殊字符(Tom)

  • contrib/fuzzystrmatch中,纠正非缺省成本levenshtein距离计算(Marcin Mank)

  • contrib/pg_standby中,禁用Windows上带有信号触发器转移(Fujii Masao)

    这没有什么有用的,因为Windows没有Unix风格讯号,但是最近变化确实崩溃。

  • FREEZE and VERBOSE选项以正确顺序放置在contrib/vacuumdb产生的 VACUUM命令中(Heikki)

  • contrib/dblink遇到错误的时候,修复链接的可能泄露(Tatsuhito Kasahara)

  • 确保psql的flex模块与正确系统标题定义一起被编译(Tom)

    这将修复平台上的编译错误,其中--enable-largefile在产生代码中导致的 不兼容变化。

  • 使得postmaster忽略任何连接请求包中的application_name参数, 以优化与未来libpq版本的兼容(Tom)

  • 更新时区缩写文件以匹配当前实际情况(Joachim Wieland)

    这包含添加IDT到缺省时区缩写设置。

  • 为了Antarctica, Argentina, Bangladesh, Fiji, Novokuznetsk, Pakistan, Palestine, Samoa, Syria中DST变化规律更新时区数据文件到 tzdata发布2009s。也为了Hong Kong历史纠正。