企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# E.28\. 版本 9.0.6 > **发布日期:** 2011-12-05 这个版本包含各种自9.0.5以来的修复。想要获得关于9.0主版本的新特性信息, 请参阅[Section E.34](#calibre_link-163)。 ## E.28.1\. 迁移到版本 9.0.6 运行9.0.X的系统不需要转储/恢复。 然而,在`information_schema.referential_constraints` 视图的定义中发现了一个长期存在的错误。如果你依赖于该视图的正确结果, 那么你应该如下第一条变更日志条目解释的那样替换它的定义。 另外,如果你是从一个早于9.0.4的版本升级而来,那么请参阅9.0.4的版本声明。 ## E.28.2\. 修改列表 * 修复了`information_schema.referential_constraints`视图中的bug (Tom Lane) 这个视图关于匹配外键约束和依赖的主键或唯一键约束不够仔细。 这会导致无法显示外键约束,或显示多次外键约束, 或宣称它依赖于与它实际依赖的约束不同的约束。 由于该视图的定义是通过initdb安装的,只是升级将不能修复这个问题。 如果你需要在一个现有安装上修复,你可以(作为超级用户)删除`information_schema` 模式然后通过寻源`_SHAREDIR_`/information_schema.sql重新创建它。 (如果不确定`_SHAREDIR_`在哪,运行`pg_config --sharedir`。) 必须在每个要修复的数据库充重复这个操作。 * 修复加入标量返回函数的输出的`UPDATE`或`DELETE`期间可能的损坏 (Tom Lane) 只有在同时更新同一个目标行时会发生损坏,所以这个问题只是间歇性的出现。 * 修复WAL记录为GIN索引更新不正确的重放 (Tom Lane) 这会导致崩溃后或在一个热备服务器上有一个瞬间不能找到索引条目。 不过,该问题可以通过对索引的下一个`VACUUM`修复。 * 修复`CREATE TABLE dest AS SELECT * FROM src`或`INSERT INTO dest SELECT * FROM src` 期间TOAST相关的数据损坏 (Tom Lane) 如果一个表已经通过 `ALTER TABLE ADD COLUMN`修改, 那么逐字的拷贝它的数据到另一个表在某些极端情况下会产生损坏的结果。 该问题只会在8.4和以后的版本中的确定形式下出现, 但是我们也在更早的版本中打了补丁,以防有其他代码路径会触发相同的bug。 * 修复热备启动期间可能的失败 (Simon Riggs) * 当最初的快照不完整时更快的启动热备份 (Simon Riggs) * 修复toast表访问陈旧的syscache条目期间的竞态条件 (Tom Lane) 典型症状是类似"missing chunk number 0 for toast value NNNNN in pg_toast_2619" 这样的瞬态错误,这里被引用的toast表总是属于系统目录。 * 追踪用于参数缺省表达式中的条目上的函数的依赖性 (Tom Lane) 以前,可以在没有删除或修改函数之前删除引用对象,导致使用该函数时的错误行为。 请注意,仅仅安装这个更新将不能修复丢失的依赖条目;要想修复,你需要在每一个这样的函数之后 `CREATE OR REPLACE`。如果你有缺省依赖于非内建对象的函数,建议这样做。 * 允许设置-返回SQL函数内联多个OUT参数 (Tom Lane) * 对于加入删除来说不要依赖延迟的唯一索引 (Tom Lane and Marti Raudsepp) 延迟的唯一约束可能不支持内部事务,所以假定它会给出不正确的查询结果。 * 使`DatumGetInetP()`取出有1字节开头的inet资料,并且添加一个新的宏 `DatumGetInetPP()` (Heikki Linnakangas) 这个改变不会影响核心代码,但是可以阻止期望`DatumGetInetP()` 按照通常的惯例产生非压缩的数据的扩展代码中的崩溃。 * 改善`money`类型的输入和输出的语言环境支持 (Tom Lane) 除了不支持所有的标准[`lc_monetary`](#calibre_link-1571) 格式化选项之外,输入和输出函数也是不一致的,这意味着转储的`money` 值中的语言环境不可以被重新读取。 * 不让[`transform_null_equals`](#calibre_link-1572) 影响`CASE foo WHEN NULL ...`构造 (Heikki Linnakangas) `transform_null_equals`只应该影响直接由用户编写的`foo = NULL`表达式, 不是这种形式的`CASE`内部产生的平等检查。 * 更改外键触发创建以便更好的支持自我参考的外键 (Tom Lane) 对于参考它自己的表的级联外键,一个行更新将作为一个事件触发`ON UPDATE`触发器和 `CHECK`触发器。必须先执行`ON UPDATE`触发器,否则`CHECK` 将检查行的一个非最终状态,并且可能抛出一个不恰当的错误。不过,触发这些触发器的顺序则取决于它们的名字, 它们通常以创建的顺序排序,因为触发器自动生成的名字遵循惯例"RI_ConstraintTrigger_NNNN"。 适当的修复需要修改该惯例,我们将在9.2中做这块,不过在现存的版本中改变它看起来是有风险的。 所以这个修复只是改变触发器的创建顺序。用户遇到这个类型的错误时应该删除并重建外键约束, 以使它的触发器获得正确的顺序。 * 当跟踪缓冲区分配率时避免浮点型下溢 (Greg Matthews) 当它本身无害时,在特定平台上这将导致恼人的内核日志信息。 * 当在Windows下启动子进程时,保护配置文件名和行号值 (Tom Lane) 以前,这些在`pg_settings`视图中显示的不正确。 * 修复ecpg的SQLDA区域中不正确的字段排列 (Zoltan Boszormenyi) * 保持空行在psql的命令历史的命令里面 (Robert Haas) 前者的行为可能导致问题,例如,如果一个空行从一个字符串中删除。 * 修复pg_dump以转储用户定义和自动生成类型之间的转换,比如表的行类型 (Tom Lane) * pg_upgrade的各种修复 (Bruce Momjian) 正确的处理排他约束,避免在Windows上的失败,不要抱怨8.4数据库中错误匹配的toast表名。 * 使用xsubpp的首选版本建立PL/Perl,不一定要操作系统的主要副本 (David Wheeler and Alex Hunsaker) * 修复`contrib/dict_int`和`contrib/dict_xsyn`中不正确的编码 (Tom Lane) 某些函数不正确的假设由`palloc()`返回的内存保证调到零位。 * 修复`contrib/unaccent`的配置文件解析中的各种错误 (Tom Lane) * 查询取消`pgstatindex()`中的立即中断 (Robert Haas) * 修复Mac OS X启动脚本中日志文件名的错误引用 (Sidar Lopez) * 确保VPATH建立适当的安装所有的服务器头文件 (Peter Eisentraut) * 缩短在冗长的错误信息中报告的文件名 (Peter Eisentraut) 正规的建立总是只是报告包含错误信息调用的C文件的名字,但是VPATH建立以前报告一个绝对路径名。 * 修复Windows时区名称中美洲(Central America)的说明 (Tom Lane) 映射"Central America Standard Time"到`CST6`,而不是`CST6CDT`, 因为DST在中美洲通常不是随处可见的。 * 更新时区数据文件为tzdata版本2011n,因为DST规律在 Brazil, Cuba, Fiji, Palestine, Russia, 和 Samoa改变了; 还有Alaska 和 British East Africa的历史的修正。