E.15. 版本 8.4.8 #
发行日期
2011-04-18
本次发布包含对 8.4.7 的多方面修复。有关 8.4 大版本中新特性的信息,请参见第 E.23 节。
E.15.1. 迁移到版本 8.4.8
对于运行 8.4.X 的用户,不需要进行转储/恢复。
不过,如果你的安装是通过运行 pg_upgrade 从前一个大版本升级的,应采取措施防止因 pg_upgrade 一个现已修复的缺陷导致可能的数据丢失。推荐的解决方案是对所有 TOAST 表执行 VACUUM FREEZE。更多信息见 http://wiki.postgresql.org/wiki/20110408pg_upgrade_fix。
不过,如果你是从早于 8.4.2 的版本升级,请参见第 E.21 节。
E.15.2. 变更
修复 pg_upgrade 对 TOAST 表的处理(Bruce Momjian)
在 pg_upgrade 期间,TOAST 表的
pg_class.relfrozenxid值未被正确复制到新安装。这之后可能导致pg_clog文件在仍被需要用于验证 TOAST 表中的元组时被丢弃,导致 “could not access status of transaction” 失败。这一错误对曾用 pg_upgrade 升级的安装构成显著的数据丢失风险。此补丁纠正了未来使用 pg_upgrade 时的问题,但本身不能治愈已用带缺陷版本的 pg_upgrade 处理过的安装中的问题。
抑制错误的 “PD_ALL_VISIBLE flag was incorrectly set” 警告(Heikki Linnakangas)
VACUUM有时会在实际有效的情况下发出此警告。禁止在组合类型中包含其自身(Tom Lane)
这防止了服务器在处理该组合类型时无限递归的场景。虽然这种结构有一些可能的用途,但它们似乎不足以抵消确保其始终安全工作所需的努力。
避免目录缓存初始化期间的潜在死锁(Nikhil Sontakke)
某些情况下,缓存加载代码会在锁定索引的目录之前获取系统索引上的共享锁。这可能与尝试以另一种更标准的顺序获取排他锁的进程死锁。
修复当目标元组存在并发更新时
BEFORE ROW UPDATE触发器处理中的悬空指针问题(Tom Lane)已观察到该缺陷在尝试执行
UPDATE RETURNING ctid时导致间歇性的 “cannot extract system attribute from virtual tuple” 失败。发生更严重错误(例如为更新后的元组生成错误索引项)的概率非常小。当表存在未决的延迟触发器事件时禁止
DROP TABLE(Tom Lane)此前
DROP会照常执行,导致触发器最终触发时报 “could not open relation with OID nnn” 错误。防止 GEQO 优化期间由恒假 WHERE 条件触发的崩溃(Tom Lane)
改进规划器对半连接和反连接情况的处理(Tom Lane)
修复文本搜索的选择率估计,使其考虑 NULL(Jesper Krogh)
改进 PL/pgSQL 处理带已删除列的行类型的能力(Pavel Stehule)
这是先前在 9.0 中所做修复的向后移植。
修复涉及数组切片的 PL/Python 内存泄漏(Daniel Popowich)
修复 pg_restore,使其能处理 TOC 文件中的长行(超过 1KB)(Tom Lane)
加入更多防护,防止因过于激进的编译器优化导致的除零崩溃(Aurelien Jarno)
支持在 FreeBSD 和 OpenBSD 的 MIPS 上使用 dlopen()(Tom Lane)
此前有一个硬编码的假设:该系统函数在这些系统的 MIPS 硬件上不可用。现在改用编译期测试,因为较新的版本已经有了它。
修复 HP-UX 上的编译失败(Heikki Linnakangas)
修复 Windows 上 libintl 的版本不兼容问题(Hiroshi Inoue)
修复 Windows 构建脚本中 xcopy 的用法,使其在 Windows 7 下正确工作(Andrew Dunstan)
这只影响构建脚本,不影响安装或使用。
修复 pg_regress 在 Cygwin 上使用的路径分隔符(Andrew Dunstan)
把时区数据文件更新为 tzdata 版本 2011f(智利、古巴、福克兰群岛、摩洛哥、萨摩亚和土耳其的夏令时法规变更;以及对南澳大利亚、阿拉斯加和夏威夷的历史修正)。