pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
2004-03-08
本次发布包含对 7.4.1 的多方面修复。有关 7.4 大版本中新特性的信息,请参见 第 E.177 节。.
对于运行 7.4.X 的用户,不需要进行转储/恢复。不过,作为合并 7.4.X 系统目录初始内容中发现的两个错误的修复的最简单方法,它可能是可取的。用 7.4.2 的 initdb 做转储/initdb/重载序列会自动纠正这些问题。
两个错误中较严重的是数据类型 anyarray 的对齐标签错误;这是一个问题,因为 pg_statistic 系统目录使用 anyarray 列。当规划涉及双对齐列(如 float8 和 timestamp)上 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';
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 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。