E.89. 版本 9.0.9
发布日期: 2012-08-17
这个版本包含各种自9.0.8以来的修复。想要获得关于9.0主版本的新特性信息, 请参阅第 E.98 节。
E.89.1. 迁移到版本 9.0.9
运行9.0.X的系统不需要转储/恢复。
另外,如果你是从一个早于9.0.6的版本升级而来,请参阅第 E.92 节。
E.89.2. 修改列表
-
阻止通过XML实体引用访问外部文件/URL (Noah Misch, Tom Lane)
xml_parse()
将尝试获取解决在XM值中引用的DTD和实体所需要的外部文件或URL, 因此允许非特权数据库用户使用数据库服务器的权限尝试获取数据。 但是外部数据不会直接返回给用户,如果该数据不可以解析为合法的XML, 则它的一部分会以错误消息的方式外露;并且在任何情况下, 仅仅能够检查文件的存在可能对一个攻击者有用。(CVE-2012-3489) -
阻止通过contrib/xml2的
xslt_process()
访问外部文件/URL (Peter Eisentraut)libxslt提供通过样式表命令读写文件和URL的能力, 因此允许非特权的数据库用户使用数据库服务器的权限读写数据。 通过适当的使用libxslt的安全选项禁用该功能。 (CVE-2012-3488)
另外,删除
xslt_process()
从外部文件/URL获取文档和样式表的能力。 虽然这是记录中的"特性",但是它长期被认为是一个坏的想法。 CVE-2012-3489修复打破了这个能力,并且与其花费时间尝试修复它, 不如立刻删除它。 -
阻止btree索引页过早的回收 (Noah Misch)
当我们允许只读事务跳过设定XID时,我们引入了已删除的btree索引页可以被回收的可能性, 而一个只读事务仍然在该索引页中运行。这可能会导致不正确的索引搜索结果。 这样一个错误发生在字段中的可能性因为计时要求看起来非常低,但是,尽管如此也应该修复它。
-
用新创建的或重新设置的序列修复崩溃安全bug (Tom Lane)
如果ALTER SEQUENCE在一个新创建的或重置的序列上执行, 并且正好在它上面有一个
nextval()
调用,那么然后服务器崩溃了, WAL重放将恢复该序列到nextval()
还没有做的那个状态, 因此允许第一个序列值再次被下一个nextval()
调用返回。 特别的,这会为serial列显示,因为串行列序列的创建包括一个 ALTER SEQUENCE OWNED BY步骤。 -
修复
txid_current()
,当不是在热备时报告正确的纪元 (Heikki Linnakangas)这个修复了前一个小版本中引入的回归。
-
修复热备启动里的bug,当一个主要事务有许多子事务时 (Andres Freund)
这个错误导致和"out-of-order XID insertion in KnownAssignedXids"一样的失败报告。
确保backup_label文件在
pg_start_backup()
之后是同步的 (Dave Kerr)-
修复walsender进程中的超时处理 (Tom Lane)
WAL发送后端进程忽略了建立一个SIGALRM处理器, 意味着它们在一些极端情况下将一直等待,而这种情况应该发生的是超时。
-
改善Back-patch 9.1以压缩同步请求队列 (Robert Haas)
这提高了检查点期间的性能。该9.1改变现在看起来对于back-patch字段测试足够安全。
-
修复LISTEN/NOTIFY以更好的处理I/O问题, 例如超出磁盘空间 (Tom Lane)
在写入失败之后,所有随后发送更多NOTIFY信息的尝试都将失败, 带有像这样的信息:"Could not read from file "pg_notify/nnnn" at offset nnnnn: Success"。
-
只允许autovacuum通过直接阻塞进程被自动取消 (Tom Lane)
原始编码允许在某些情况下不一致的行为;特别的,autovacuum在少于deadlock_timeout 宽限期后被取消。
改善autovacuum取消的登陆 (Robert Haas)
修复日志收集器,以便log_truncate_on_rotation在 服务器启动后的第一个日志旋转期间工作 (Tom Lane)
修复WITH附属于一个嵌套的集合运算 (UNION/INTERSECT/EXCEPT) (Tom Lane)
确保整个行引用子查询不会包括任何额外的GROUP BY或 ORDER BY列 (Tom Lane)
-
不允许在CREATE TABLE期间在CHECK 约束和索引定义中拷贝整个行引用 (Tom Lane)
这种情况会出现在带有LIKE或INHERITS的CREATE TABLE中。 拷贝的整个行变量用原始表而不是新表的行类型错误的标记。拒绝LIKE 看起来合理的情况,因为行类型可能稍后会有分歧。对于INHERITS, 我们应该允许它,隐式转换为当前表的行类型;但是这样将请求更多的工作。
修复ARRAY(SELECT ...)子查询中的内存泄露(Heikki Linnakangas, Tom Lane)
-
修复正则表达式中公共前缀的提取 (Tom Lane)
该代码会对量化的加上括号的子表达式感到困惑,如^(foo)?bar。 这会导致对这种模式的搜索的不正确的索引优化。
修复interval常量中有符号的hh:mm 和hh:mm:ss 字段分析的bug (Amit Kapila, Tom Lane)
-
当在PL/Python中转换一个Python unicode字符串为服务器编码时, 使用Postgres的编码转换函数,而不是Python的 (Jan Urbanski)
这避免了一些极端情况问题,尤其是Python不支持所有的Postgres编码。 一个值得注意的功能性改变是,如果服务器编码是SQL_ASCII, 你将得到该字符串的UTF-8表示;以前,字符串中的任何非ASCII字符都将导致一个错误。
修复PL/Python中PostgreSQL编码的映射为Python编码 (Jan Urbanski)
适当的报告contrib/xml2的
xslt_process()
中的错误 (Tom Lane)更新时区数据文件为tzdata版本2012e,因为Morocco和Tokelau中的DST规律改变。