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

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

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

E.175. 版本 7.4.2 #

发行日期

2004-03-08

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

E.175.1. 迁移到版本 7.4.2

对于运行 7.4.X 的用户,不需要进行转储/恢复。不过,作为合并 7.4.X 系统目录初始内容中发现的两个错误的修复的最简单方法,它可能是可取的。用 7.4.2 的 initdb 做转储/initdb/重载序列会自动纠正这些问题。

两个错误中较严重的是数据类型 anyarray 的对齐标签错误;这是一个问题,因为 pg_statistic 系统目录使用 anyarray 列。当规划涉及双对齐列(如 float8timestamp)上 WHERE 子句的查询时,错误标记可能导致规划器误估甚至崩溃。强烈建议所有安装通过 initdb 或按照下述手工修复程序修复此错误。

较小的错误是系统视图 pg_settings 应被标记为具有公共更新访问权,以允许用 UPDATE pg_settings 替代 SET。这也可以通过 initdb 或手工修复,但除非你想用 UPDATE pg_settings,否则不必修复。

如果你不想做 initdb,以下程序可以修复 pg_statistic。作为数据库超级用户,执行:

-- clear out old data in pg_statistic:
DELETE FROM pg_statistic;
VACUUM pg_statistic;
-- this should update 1 row:
UPDATE pg_type SET typalign = 'd' WHERE oid = 2277;
-- this should update 6 rows:
UPDATE pg_attribute SET attalign = 'd' WHERE atttypid = 2277;
--
-- At this point you MUST start a fresh backend to avoid a crash!
--
-- repopulate pg_statistic:
ANALYZE;

这可以在运行中的数据库上完成,但要注意在重新填充 pg_statistic 之前,被更改数据库中运行的所有后端都必须重启才是安全的。

要修复 pg_settings 错误,只需执行:

GRANT SELECT, UPDATE ON pg_settings TO PUBLIC;

上述程序必须在安装的每个数据库中执行,包括 template1,理想情况下也包括 template0。如果不修复模板数据库,之后创建的任何数据库都会包含相同的错误。template1 可以像任何其他数据库一样修复,但修复 template0 需要额外的步骤。首先,从任意数据库发出:

UPDATE pg_database SET datallowconn = true WHERE datname = 'template0';

接下来连接到 template0 并执行上述修复程序。最后执行:

-- re-freeze template0:
VACUUM FREEZE;
-- and protect it against future alterations:
UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';

E.175.2. 变更

7.4.2 版本包含 7.3.6 版本中的所有修复,外加以下修复:

  • 修复可能导致优化器崩溃的 pg_statistics 对齐缺陷

    有关此问题的详情见上文。

  • 允许非超级用户更新 pg_settings

  • 修复几个优化器缺陷,其中大多数导致 在子计划目标列表中未找到变量错误

  • 避免大型多索引扫描启动期间的内存不足失败

  • 修复可能导致 COPY IN 期间内存不足错误的多字节问题

  • 修复从无 OID 的表 SELECT INTO / CREATE TABLE AS 的问题

  • 修复并行测试期间 alter_table 回归测试的问题

  • 修复达到打开文件限制的问题,特别是在 OS X 上(Tom)

  • 对土耳其语区域设置问题的部分修复

    initdb 现在能在土耳其语区域设置下成功,但仍有一些与 i/I 问题相关的不便。

  • 让 pg_dump 在恢复时设置客户端编码

  • 其他次要的 pg_dump 修复

  • 允许 ecpg 再次使用 C 关键字作为列名(Michael)

  • 为 ecpg 的 SELECT/INSERT/UPDATE/DELETE 添加 WHENEVER NOT_FOUND(Michael)

  • 修复调用返回集合函数的查询导致的 ecpg 崩溃(Michael)

  • 各种其他 ecpg 修复(Michael)

  • Borland 编译器的修复

  • 线程构建改进(Bruce)

  • 各种其他构建修复

  • 各种 JDBC 修复

提交更正

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