ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# E.17\. 发布9.1.2 > **发布日期:** 2011-12-05 该发布包含来自9.1.1的各种修复。关于9.1主要版本新功能的信息, 参阅[Section E.19](#calibre_link-148)。 ## E.17.1\. 迁移到版本9.1.2 为运行9.1.X不需要转储/恢复。 然而,在`information_schema.referential_constraints`视图的定义中 发现了一个长期错误。如果你依赖该视图的正确结果,那么 你应该像下面第一个更新记录项解释的替换它的定义。 另外,如果你使用`citext`数据类型,并且你 通过运行pg_upgrade从以前的主要版本升级, 你应该运行`CREATE EXTENSION citext FROM unpackaged` 以避免`citext`操作中排序规则相关的错误。 如果你从包含`citext`数据类型实例的9.1之前数据库恢复转储,那么同样是必要的。 如果在升级到9.1.2之前你已经运行`CREATE EXTENSION`命令, 你将不需要做手动更新目录, 正如第二个记录项解释的那样。 ## E.17.2\. 变化 * 修复`information_schema.referential_constraints`视图中错误(Tom Lane) 该视图对于匹配依赖主键的外键约束或者唯一性约束不够仔细。 这可能导致显示所有外键约束的错误,或者显示多次,或者 声明它取决于比确实存在的不同约束。 因为该视图定义是通过initdb安装的, 只是升级不会修复该问题。如果你需要在现有的安装中修复这个问题 ,你可以(作为一个超级用户)删除 `information_schema`模式,然后通过 `_SHAREDIR_`/information_schema.sql 重新创建它。 (如果你不确定`_SHAREDIR_`在哪里,运行`pg_config --sharedir`) 必须在被修复的每个数据库中重复。 * 使得`contrib/citext`的更新脚本 修复`citext`列和索引的排序规则(Tom Lane) 现有的`citext`列和索引不能正确标记为 在pg_upgrade中来自 9.1之前服务器的collatable数据类型, 或者当包含`citext`类型的9.1之前备份被加载到9.1服务器时。 这导致这些列上的操作有错误而失败, 比如"不能决定为字符串比较使用哪个排序规则"。 这种变化可以通过 在`CREATE EXTENSION citext FROM unpackaged`中 升级`citext`模块到一个适当的9.1扩展的 相同脚本进行修复。 如果你有遇到这个问题的以前升级数据库, 而且你已经运行`CREATE EXTENSION`, 你可以手动运行(作为超级用户) 在`_SHAREDIR_`/extension/citext--unpackaged--1.0.sql 结尾发现的`UPDATE`命令。 (如果你不确定`_SHAREDIR_`在哪,那么运行`pg_config --sharedir`。) 如果不确定再次这样做是没有害处的。 * 修复`UPDATE`或者`DELETE` 加入到标量返回函数输出中的 可能崩溃(Tom Lane) 如果目标行同时被更新,那么可能发生崩溃,因此 这个问题间歇性地出现。 * 修复GIN索引更新WAL记录的错误回放(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以及之后版本的精确形式中, 但是我们补丁早期版本以及有其他编码路径下可以触发相同错误。 * 修复热备启动中可能错误(Simon Riggs) * 当初始快照不完整时,更快启动热备(Simon Riggs) * 修复toast表访问陈旧syscache项中的竞争条件(Tom Lane) 典型症状是短暂错误像"为pg_toast_2619中toast值NNNNN丢失块号0", 其中引用的toast表总是从属于一个系统目录。 * 跟踪用于参数缺省表达式函数依赖(Tom Lane) 以前,被引用的对象没有删除或者修改函数而被删除, 当使用该函数时,导致错误操作。 请注意,仅仅安装此更新将不能修复丢失依赖项; 这样,你之后需要`CREATE OR REPLACE`每个函数。 如果你有缺省依赖非内置对象的函数,这样做是值得推荐的。 * 修复nestloop连接中占位符变量的错误管理(Tom Lane) 这个错误已知的导致"在子计划目标列中没有找到变量"规划器错误, 并且当涉及到外部连接时,可能导致错误查询输出。 * 修复涉及聚集表达式排序的window函数(Tom Lane) 以前这些可能伴随"没有找到pathkey项排序"规划器错误而失败。 * 修复"MergeAppend子目录列不匹配MergeAppend"规划器错误(Tom Lane) * 修复collatable和noncollatable输入索引匹配操作符(Tom Lane) 在9.1.0中,可索引操作符具有非collatable左边 输入类型和collatable右边输入类型不会 被公认为匹配左边列的索引。 例子是`hstore` `?` `text`操作符。 * 允许有多个OUT参数的设置返回SQL函数的内联(Tom Lane) * 不能信任连接删除的延缓唯一索引 (Tom Lane 和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中执行,但在现有的版本中改变它似乎有风险。 所以这个补丁只改变 触发器的创建顺序。用户遇到此类型的错误 要删除并重新创建外键约束使得它的 触发器进入正确的顺序。 * 修复`DROP OPERATOR FAMILY`中`IF EXISTS`正常运行(Robert Haas) * 不允许来自自己脚本中扩展的删除(Tom Lane) 这阻止了在扩展依赖的错误管理下的古怪操作。 * 不要标记自动生成类型为扩展成员(Robert Haas) 关系行类型以及自动生成的数组类型不需要`pg_depend`中自己的扩展成员项, 并且创建这样的项使得扩展更新复杂化。 * 在`CREATE EXTENSION`中处理无效的早已存在的`search_path` 设置(Tom Lane) * 当跟踪缓冲区分配率时,避免浮点下溢(Greg Matthews) 当对自身无害时,在某些平台上这可能导致讨厌的内核日志信息。 * 防止可串行化模式下运行的自动清理事务(Tom Lane) 以前自动清理使用集群端缺省事务隔离级别,但是 没有必要使用高于READ COMMITTED的任何东西, 并且使用SERIALIZABLE可以导致其他进程的不必要延迟。 * 确保walsender进程迅速反应给SIGTERM(Magnus Hagander) * 从基础备份中排除`postmaster.opts` (Magnus Hagander) * 当在Windows下启动子进程时,保留配置文件名字和行号值(Tom Lane) 以前,这些在`pg_settings`视图中不能被正确显示。 * 修复ecpg的SQLDA区域中不正确字段对齐(Zoltan Boszormenyi) * 保留psql的命令历史中该命令中的空白行(Robert Haas) 如果从字符串中删除空行,前者操作可能产生问题,比如。 * 避免pg_dump中特定平台无限循环(Steve Singer) * 修复pg_dump中纯文本输出格式的压缩 (Adrian Klaver和Tom Lane) pg_dump从历史角度理解没有`-F`切换的`-Z`, 这意味着它应该发出纯文本输出的gzip压缩版本。恢复该行为。 * 修复pg_dump以备份自动生成类型之间用户定义的映射, 比如表rowtype(Tom Lane) * 修复pg_dump中外服务器名字的丢失引用(Tom Lane) * pg_upgrade各种修复(Bruce Momjian) 正确处理排斥约束,避免Windows上错误, 不要抱怨8.4数据库中不匹配toast表名。 * 在PL/pgSQL中,允许外表定义行类型(Alexander Soudakov) * 解决了PL/Perl函数结果转换(Alex Hunsaker和Tom Lane) 恢复PL/Perl函数返回`void`的9.1之前操作忽略了最后Perl语句的结果值; 如果该语句返回一个引用,那么9.1.0可能抛出错误。 另外,确保它返回复合类型字符串值, 只要该字符串符合类型的输入格式。 此外,当函数的声明结果类型分别不是数组或者复合类型时, (先前9.1版本而不能返回字符串像这种情况中的 `ARRAY(0x221a9a0)`或者 `HASH(0x221aa90)`) 尝试返回Perl数组或者哈希而抛出错误。 * 确保PL/Perl字符串总是正确的UTF8编码(Amit Khandekar和Alex Hunsaker) * 使用xsubpp首选版本以编译PL/Perl, 不一定操作系统的主拷贝(David Wheeler和 Alex Hunsaker) * 在PL/Python异常中正确扩散SQLSTATE(Mika Eloranta和Jan Urbanski) * 为Python主要版本不同于一个建立的不要安装PL/Python扩展文件(Peter Eisentraut) * 如果他们提供psql,那么 改变所有`contrib`扩展脚本文件以报告 有用错误消息(Andrew Dunstan和Tom Lane) 这有助于教会人们关于使用`CREATE EXTENSION`的新方法 加载这些文件。在多数情况下,使用的脚本可能直接失败,但是 伴随着难以解释信息。 * 修复`contrib/dict_int`和 `contrib/dict_xsyn`中错误编码(Tom Lane) 一些函数错误地假设通过`palloc()`返回的内存保证为零。 * 从正则表达式测试机制中删除`contrib/sepgsql`测试(Tom Lane) 因为这些测试需要root权限,它们不切实际地自动运行。 相反切换到手动方式,并且提供测试脚本。 * 修复`contrib/unaccent`的配置文件解析中的各种错误(Tom Lane) * 接受`pgstatindex()`中的及时查询取消中断(Robert Haas) * 修复Mac OS X启动脚本中日志文件名的错误引用(Sidar Lopez) * 恢复`WAL_DEBUG`的意外激活(Robert Haas) 幸运的是,作为调试工具,这是相当便宜的; 但它并不打算缺省启用,所以恢复。 * 确保VPATH编译正确安装所有服务器头文件(Peter Eisentraut) * 缩短详细错误消息中报告的文件名(Peter Eisentraut) 规则编译一直被包含错误消息调用的C文件名报告, 但是VPATH编译之前报告绝对路径名。 * 修复中美洲Windows时区名解释(Tom Lane) 映射"中美洲标准时间"为`CST6`,而不是`CST6CDT`, 因为在中美洲任何地方通常观察不到DST。 * 为了Brazil, Cuba, Fiji, Palestine, Russia和Samoa中DST变化规律 更新时区数据文件到tzdata发布2011n; 以及历史修正Alaska和British East Africa。