选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 9.3
历史版本PostgreSQL 9.3 已于 2018 年 11 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页

E.24. 版本 9.3.2 #

发行日期:. 2013-12-05

本次发布包含对 9.3.1 的多方面修复。 有关 9.3 大版本中新特性的信息,请参见 第 E.26 节。.

E.24.1. 迁移到版本 9.3.2

对于运行 9.3.X 的用户,不需要进行转储/恢复。

不过,本版本纠正了若干潜在的数据损坏问题。请参见下面前三条变更日志,以确认你的安装是否受影响以及可以采取什么措施。

不过,如果你是从早于 9.3.1 的版本升级, 请参见 第 E.25 节

E.24.2. 变更

  • 修复 VACUUM 判断是否可以更新 relfrozenxid 的测试(Andres Freund)

    某些情况下,VACUUM(手工或自动)可能错误地推进表的 relfrozenxid 值,使元组逃过冻结,导致这些行在经过 2^31 个事务后变得不可见。由于需要多次错误推进才会发生实际丢失,数据丢失的概率相当低,但并非为零。在 9.2.0 及更高版本中,丢失概率更高,而且这一缺陷还可能导致 could not access status of transaction 错误。从 9.0.4、8.4.8 或更早版本升级的用户不受影响,但之后的所有版本都包含该缺陷。

    升级后,在把 vacuum_freeze_table_age 设为零的情况下对所有数据库中的所有表执行清理,可以缓解此问题。这会修复任何潜伏的损坏,但无法修复所有既有的数据错误。不过,如果安装在其生命周期内执行的事务少于 2^31 个更新(可用 SELECT txid_current() < 2^31 检查),则在执行此清理之后即可认为该安装是安全的。

  • 修复 MultiXactId 冻结中的多个缺陷(Andres Freund、[Aacute]lvaro Herrera)

    这些缺陷可能导致 could not access status of transaction 错误,或者出现重复或消失的行。从 9.3.0 之前版本升级的用户不受影响。

    升级后,在把 vacuum_freeze_table_age 设为零的情况下对所有数据库中的所有表执行清理,可以缓解此问题。这会修复潜伏的损坏,但无法修复所有既有的数据错误。

    另外一个独立的问题是,这些缺陷还可能导致备库与主库失去同步,从而表现出主库中不存在的数据错误。因此建议,升级后把运行过 9.3.0 和 9.3.1 的备库从主库重新克隆(例如用新的基础备份)。

  • 修复热备启动期间 pg_clogpg_subtrans 的初始化(Andres Freund、Heikki Linnakangas)

    这一缺陷会把已提交事务标记为未提交,从而在备库开始接受热备查询的那一刻造成数据丢失。除非备库启动时主库自上次检查点以来执行了大量更新事务,否则这种损坏的可能性很小。症状包括行缺失、本应删除的行仍可见,以及已更新行的过时版本与新版本同时可见。

    该缺陷是在 9.3.0、9.2.5、9.1.10 和 9.0.14 版本中引入的。只运行过更早版本的备库没有风险。建议曾运行过任何含缺陷版本的备库在升级后从主库重新克隆(例如用新的基础备份)。

  • 修复更新链遍历中的多个缺陷(Andres Freund、[Aacute]lvaro Herrera)

    在存在并发更新的情况下,这些缺陷可能导致错误行为,例如锁定甚至更新错误的行。也可能出现虚假的 unable to fetch updated version of tuple 错误。

  • 修复快速路径锁定中的悬空指针问题(Tom Lane)

    这可能导致共享内存中锁数据结构的损坏,造成 lock already held 和其他奇怪的错误。

  • 修复超时管理中的多种竞态条件(Tom Lane)

    这些错误可能导致服务器进程因阻塞了 SIGALRM 和/或 SIGINT 而失去响应。

  • 在 WAL 重放期间截断 pg_multixact 内容(Andres Freund)

    这避免了备库中磁盘空间消耗不断增加。

  • 确保防回卷 VACUUM 在仅验证了没有元组需要冻结时也把该页计为已扫描(Sergey Burladyan、Jeff Janes)

    这一缺陷可能导致 relfrozenxid 未能推进,使该表仍被认为需要再次防回卷清理。最坏情况下,数据库甚至可能为防止回卷而关闭。

  • 修复 MultiXactId 的全表清理请求机制(Andres Freund)

    这一缺陷可能导致大量无用的自动清理活动。

  • 修复 GIN 索引 posting 树页面删除中的竞态条件(Heikki Linnakangas)

    这可能导致瞬时的错误结果或查询失败。

  • 修复 SP-GiST 索引创建期间的 unexpected spgdoinsert() failure 错误(Teodor Sigaev)

  • 修复物化视图中的若干缺陷(Kevin Grittner、Andres Freund)

  • 重新允许出现在带别名的 JOIN 内的重复表别名(Tom Lane)

    历史上,PostgreSQL 一直接受类似这样的查询:

     SELECT ... FROM tab1 x CROSS JOIN (tab2 x CROSS JOIN tab3 y) z 
    

    ,尽管严格解读 SQL 标准会禁止表别名 x 的重复使用。9.3.0 中一个 misguided 的变更导致它拒绝了一些以前被接受的情况。现已恢复先前行为。

  • 避免展平 SELECT 列表中包含包裹在子 SELECT 中的易变函数的子查询(Tom Lane)

    这避免了因易变函数被额外求值而导致的意外结果。

  • 修复规划器对外连接中嵌套的非简单变量子查询输出的处理(Tom Lane)

    这一错误可能为涉及 JOIN 语法中多级子查询的查询生成错误的计划。

  • 修复同一非严格表达式出现在多个 WHERE 和外连接 JOIN 等值子句中时的错误规划(Tom Lane)

  • 修复对子查询的整行引用导致规划器崩溃的问题(Tom Lane)

  • 修复继承树的优化 MIN()/MAX() 计划生成错误(Tom Lane)

    当 MIN()/MAX() 的参数是表达式而不是简单变量时,规划器可能失败。

  • 修复临时文件被过早删除的问题(Andres Freund)

  • 防止打印范围值时的事务内内存泄漏(Tom Lane)

    此修复实际上消除了任何数据类型输出函数中的瞬时内存泄漏,但已知只有范围类型曾出现显著问题。

  • 修复重新加载配置文件时的内存泄漏(Heikki Linnakangas、Hari Babu)

  • 防止 NOT NULL 和 CHECK 约束违规消息中错误地显示已删除的列(Michael Paquier、Tom Lane)

  • 允许窗口函数使用默认参数和命名参数记法(Tom Lane)

    此前这些情况很可能崩溃。

  • 在漂亮打印规则和视图时抑制每行末尾的空白(Tom Lane)

    9.3.0 生成这种空白的情况比以前的版本多得多。为减少意外的行为变化,在所有情况下都抑制不必要的空白。

  • 修复规则打印中可能读取越过内存末尾的问题(Peter Eisentraut)

  • 修复 int2vectoroidvector 值的数组切片(Tom Lane)

    这类表达式现在会被隐式提升为常规的 int2oid 数组。

  • 修复把空 hstore 值转换为 json 时返回有效 JSON 值的问题(Oskari Saarenmaa)

  • 修复使用 SQL 标准的简单 GMT 偏移时区时的错误行为(Tom Lane)

    某些情况下,系统会使用简单 GMT 偏移值,而本应使用选择简单偏移之前一直生效的常规时区设置。此变更还使 timeofday 函数遵循简单 GMT 偏移时区。

  • 防止记录 Windows 错误码翻译时可能出现的不当行为(Tom Lane)

  • 正确地为 pg_ctl 生成的命令行加引号(Naoya Anzai、Tom Lane)

    此修复仅适用于 Windows。

  • 修复当源数据库通过 ALTER DATABASE SET 设置 default_transaction_read_onlypg_dumpall 无法工作的问题(Kevin Grittner)

    此前,生成的脚本在恢复期间会失败。

  • 修复 pg_isready 对其 -d 选项的处理(Fabr[iacute]zio de Royes Mello、Fujii Masao)

  • 修复 pg_receivexlog 中 WAL 文件名的解析(Heikki Linnakangas)

    这一错误导致一旦写入了至少 4 GB 的 WAL,pg_receivexlog 在停止后就无法重新开始流式传输。

  • pg_upgrade 正确报告磁盘空间不足失败(Peter Eisentraut)

  • ecpg 以大小写敏感方式搜索带引号的游标名(Zolt[aacute]n Böszörm[eacute]nyi)

  • 修复 ecpg 对声明为 varchar 的变量列表的处理(Zolt[aacute]n Böszörm[eacute]nyi)

  • contrib/lo 防御不正确的触发器定义(Marc Cousin)

  • 把时区数据文件更新为 tzdata 版本 2013h,以反映阿根廷、巴西、约旦、利比亚、列支敦士登、摩洛哥和巴勒斯坦的夏令时法规变更。另外,新增印度尼西亚的时区缩写 WIB、WIT、WITA。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。