E.121. 版本 8.4.2 #
发行日期:. 2009-12-14
本次发布包含对 8.4.1 的多方面修复。有关 8.4 大版本中新特性的信息,请参见第 E.123 节。.
E.121.1. 迁移到版本 8.4.2
对于运行 8.4.X 的用户,不需要进行转储/恢复。不过,如果你有任何哈希索引,应当在更新到 8.4.2 后对它们执行 REINDEX,以修复可能的损坏。
E.121.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 UPDATE传播到WITH查询中,但由于各种实现限制总是失败。这也遵循WITH查询如同独立于主查询一样执行的设计规则。修复一个
WITH RECURSIVE查询紧邻另一个之内时的缺陷(Tom)修复哈希索引中的并发缺陷(Tom)
并发插入可能导致索引扫描瞬时报告错误结果。
修复 GiST 索引页分裂的不正确逻辑:当分裂依赖于索引的非首列时(Paul Ramsey)
修复启用
fastupdate的多列 GIN 索引搜索结果错误的问题(Teodor)修复 GIN 索引 WAL 条目创建中的缺陷(Tom)
这些缺陷在
full_page_writes开启时被掩盖,但在它关闭时,如果下一个检查点之前发生崩溃,WAL 重放失败是必然的。如果回收或删除旧 WAL 文件在检查点结束时失败,不要报错退出(Heikki)
更好的做法是把该问题视为非致命并允许检查点完成。未来的检查点会重试删除。这类问题在正常运行中不应出现,但已知可能由设计不当的 Windows 反病毒和备份软件引起。
确保 WAL 文件不会在 Windows 上被重复归档(Heikki)
这是其他进程干扰删除不再需要的文件时可能出现的另一种症状。
修复 PAM 口令处理使其更健壮(Tom)
已知以前的代码在 Linux
pam_krb5PAM 模块与 Microsoft Active Directory 域控制器组合下失败。它在其他地方可能也有问题,因为它对 PAM 栈会传递给它什么参数做了无根据的假设。提高 GSSAPI 和 SSPI 认证方法的最大认证令牌(Kerberos 票据)大小(Ian Turner)
虽然旧的 2000 字节限制对 Unix Kerberos 实现绰绰有余,Windows 域控制器签发的票据可能大得多。
确保域约束在
ARRAY[...]::domain(域基于数组类型)这类构造中得到强制执行(Heikki)修复某些以组合类型列作为外键的情形下的外键逻辑(Tom)
确保游标的快照在创建后不被修改(Alvaro)
如果同一事务中稍后的操作修改了游标本应返回的数据,这可能导致游标交付错误结果。
修复
CREATE TABLE,使其正确合并来自不同继承父表的默认表达式(Tom)这以前可用,但在 8.4 中损坏了。
重新启用对序列的访问统计信息收集(Akira Kurosawa)
这以前可用,但在 8.3 中损坏了。
修复
CREATE OR REPLACE FUNCTION期间所有权依赖的处理(Tom)修复对
WHEREx=x条件的不正确处理(Tom)某些情况下它们可能被当作冗余而忽略,但它们并非冗余——它们等价于
xIS NOT NULL。修复对文本上相同的易变表达式用哈希聚合实现
DISTINCT时的错误计划构造(Tom)修复易变
SELECT DISTINCT ON表达式的断言失败(Tom)修复
ts_stat(),使其在空tsvector值上不失败(Tom)让文本搜索解析器接受 XML 属性中的下划线(Peter)
修复
xml二进制输入的编码处理(Heikki)如果 XML 头未指定编码,现在默认采用 UTF-8;以前的处理不一致。
修复从
plperl调用plperlu或相反时的缺陷(Tom)内层函数的错误退出可能因未能为外层函数重新选择正确的 Perl 解释器而导致崩溃。
修复重定义 PL/Perl 函数时的会话期内存泄漏(Tom)
确保 Perl 数组在由返回集合的 PL/Perl 函数返回时被正确转换为 PostgreSQL 数组(Andrew Dunstan、Abhijit Menon-Sen)
对非返回集合的函数这早已正确工作。
修复 PL/Python 异常处理中的罕见崩溃(Peter)
修复 ecpg 中
DECLARE CURSOR语句内注释的问题(Michael)修复 ecpg,使其不把最近新增的关键字当作保留字(Tom)
这影响关键字
CALLED、CATALOG、DEFINER、ENUM、FOLLOWING、INVOKER、OPTIONS、PARTITION、PRECEDING、RANGE、SECURITY、SERVER、UNBOUNDED和WRAPPER。重新允许 psql 的
\df函数名参数中使用正则表达式特殊字符(Tom)在
contrib/fuzzystrmatch中,修正非默认代价下levenshtein距离的计算(Marcin Mank)在
contrib/pg_standby中,禁用在 Windows 上用信号触发故障转移(Fujii Masao)这从未有过任何用处,因为 Windows 没有 Unix 式信号,但最近的变更使它实际上崩溃。
在
contrib/vacuumdb生成的VACUUM命令中把FREEZE和VERBOSE选项按正确顺序排列(Heikki)修复
contrib/dblink遇到错误时可能的连接泄漏(Tatsuhito Kasahara)确保 psql 的 flex 模块用正确的系统头文件定义编译(Tom)
这修复了在
--enable-largefile导致生成代码不兼容变更的平台上的构建失败。让 postmaster 忽略连接请求包中的任何
application_name参数,以改进与未来 libpq 版本的兼容性(Tom)更新时区缩写文件以符合当前现实(Joachim Wieland)
这包括把
IDT加入默认时区缩写集合。把时区数据文件更新为 tzdata 版本 2009s for DST law changes in Antarctica, Argentina, Bangladesh, Fiji, Novokuznetsk, Pakistan, Palestine, Samoa, Syria; also historical corrections for Hong Kong。