企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# E.181\. 版本 7.4.2 > **发布日期:** 2004-03-08 这个版本包含各种自7.4.1以来的修复。关于7.4主版本的新特性的信息, 请查阅[Section E.183](#calibre_link-305)。 ## E.181.1\. 迁移到版本 7.4.2 运行7.4.X的用户不需要转储/恢复。不过, 作为合并修复在最初的7.4.X系统目录中发现的两个错误的最简单的方法,这应该会是明智的。 使用7.4.2的initdb的dump/initdb/reload序列将自动纠正这些问题。 更严重的两个错误是数据类型`anyarray`有错误的对齐标签; 这是一个问题,因为`pg_statistic`系统目录使用`anyarray`字段。 贴错标签会引起规划器错误估计甚至当包含`WHERE` 子句的规划器查询在两端对齐的字段(如`float8`和`timestamp`)上时会崩溃。 强烈建议所有安装都修复这个错误,通过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_statistic`错误,只需要做: ``` 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.181.2\. 修改列表 版本7.4.2合并了所有包含在版本7.3.6中的修复,加上下面的修复: * 修复会使优化器崩溃的`pg_statistics`对齐错误 关于这个问题的详细信息请查看上文。 * 允许非超级用户更新`pg_settings` * 修复几个优化器错误,大多数会导致"variable not found in subplan target lists"错误 * 避免启动大的多个索引扫描期间的超出内存失败 * 修复`COPY IN`期间可能导致"内存不足"错误的多字节问题 * 修复没有OID的表的`SELECT INTO` / `CREATE TABLE AS`问题 * 修复并行测试期间`alter_table`回归测试的问题 * 修复打开文件限制的问题,尤其是在OS X上 (Tom) * 部分的修复Turkish区域设置问题 initdb在Turkish的区域设置现在将成功,但是仍然有一些与`i/I`问题相关的不便。 * 使得pg_dump在恢复时设置客户端编码 * 其他较小的pg_dump修复 * 允许ecpg再次使用C关键字作为字段名 (Michael) * 添加ecpg `WHENEVER NOT_FOUND`到`SELECT/INSERT/UPDATE/DELETE` (Michael) * 修复查询调用设置返回函数时的ecpg崩溃 (Michael) * 各种其他ecpg修复 (Michael) * 修复Borland编译器 * 线程构建的改进 (Bruce) * 各种其他构建修复 * 各种JDBC修复