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

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

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

E.74. 版本 9.1.2 #

发行日期:. 2011-12-05

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

E.74.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.74.2. 变更

  • 修复 information_schema.referential_constraints 视图中的缺陷(Tom Lane)

    该视图在把外键约束与它依赖的主键或唯一键约束匹配时不够谨慎。这可能导致某个外键约束完全不被显示、被显示多次,或者声称它依赖于一个并非其实际依赖的约束。

    由于该视图定义是由 initdb 安装的,仅靠升级不会修复问题。如果需要修复现有安装,可以(以超级用户身份)删除 information_schema 模式,然后通过载入 SHAREDIR/information_schema.sql 重新创建它。(如果不确定 SHAREDIR 在哪里,运行 pg_config --sharedir。)这必须在每个要修复的数据库中重复执行。

  • contrib/citext 的升级脚本修复 citext 列和索引的排序规则(Tom Lane)

    在从 9.1 之前服务器执行 pg_upgrade 期间,或者当包含 citext 类型的 9.1 之前转储被载入 9.1 服务器时,现有的 citext 列和索引不会被正确标记为可排序数据类型。这导致这些列上的操作失败,报诸如 could not determine which collation to use for string comparison 的错误。此变更允许它们在 CREATE EXTENSION citext FROM unpackaged 期间由把 citext 模块升级为正规 9.1 扩展的同一脚本修复。

    如果你有一个此前升级的、正受此问题困扰的数据库,而且你已经运行过 CREATE EXTENSION 命令,可以(以超级用户身份)手工运行 SHAREDIR/extension/citext--unpackaged--1.0.sql 末尾的 UPDATE 命令。(如果不确定 SHAREDIR 在哪里,运行 pg_config --sharedir。)如果不确定,重复执行也没有害处。

  • 修复连接到返回标量的函数输出的 UPDATEDELETE 期间可能崩溃的问题(Tom Lane)

    只有当目标行被并发更新时才可能崩溃,因此该问题只是间歇性出现。

  • 修复 GIN 索引更新 WAL 记录的错误重放(Tom Lane)

    这可能导致崩溃后或热备服务器上瞬时找不到索引项。不过,该问题会在该索引下一次 VACUUM 时被修复。

  • 修复 CREATE TABLE dest AS SELECT * FROM srcINSERT INTO dest SELECT * FROM src 期间与 TOAST 相关的数据损坏(Tom Lane)

    如果表曾被 ALTER TABLE ADD COLUMN 修改过,在某些极端情况下,尝试把它的数据原样复制到另一个表可能产生损坏的结果。该问题只会在 8.4 及更高版本中以这种确切形式出现,但我们也给更早的版本打了补丁,以防有其他代码路径可能触发同一缺陷。

  • 修复热备启动期间可能的失败(Simon Riggs)

  • 当初始快照不完整时更快地启动热备(Simon Riggs)

  • 修复从过期 syscache 条目访问 toast 表时的竞态条件(Tom Lane)

    典型症状是诸如 missing chunk number 0 for toast value NNNNN in pg_toast_2619 的瞬时错误,其中引用的 toast 表总是属于某个系统目录。

  • 跟踪函数对参数默认值表达式中所用项的依赖(Tom Lane)

    此前,被引用的对象可以在未删除或修改函数的情况下被删除,导致函数被使用时行为异常。注意,仅仅安装此更新不会修复缺失的依赖条目;要做到这一点,之后需要对每个这样的函数执行 CREATE OR REPLACE。如果你的函数默认值依赖于非内建对象,建议这样做。

  • 修复 nestloop 连接中占位符变量的错误管理(Tom Lane)

    已知该缺陷会导致 variable not found in subplan target list 规划器错误,并且在涉及外连接时可能导致错误的查询输出。

  • 修复按涉及聚合的表达式排序的窗口函数(Tom Lane)

    此前它们可能报 could not find pathkey item to sort 规划器错误。

  • 修复 MergeAppend child's targetlist doesn't match MergeAppend 规划器错误(Tom Lane)

  • 修复对同时具有可排序和不可排序输入的操作符的索引匹配(Tom Lane)

    在 9.1.0 中,左输入类型不可排序而右输入类型可排序的可索引操作符不会被识别为匹配左列的索引。例如 hstore ? text 操作符。

  • 允许内联带多个 OUT 参数的集合返回 SQL 函数(Tom Lane)

  • 不要为连接消除信任延迟唯一索引(Tom Lane、Marti Raudsepp)

    延迟唯一约束在事务内可能不成立,因此假设它成立可能给出错误的查询结果。

  • DatumGetInetP() 解包带 1 字节头的 inet datum,并新增一个不做此事的宏 DatumGetInetPP()(Heikki Linnakangas)

    此变更不影响任何核心代码,但可能避免期望 DatumGetInetP() 按常规约定产生已解包 datum 的附加代码中的崩溃。

  • 改进 money 类型输入和输出的区域支持(Tom Lane)

    除了不支持所有标准 lc_monetary 格式化选项外,输入和输出函数还不一致,这意味着在某些区域设置下转储的 money 值无法重新读取。

  • 不让 transform_null_equals 影响 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 中做),但在现有版本中更改它似乎有风险。因此此补丁只更改触发器的创建顺序。遇到这类错误的用户应删除并重新创建外键约束,使其触发器处于正确顺序。

  • 修复 IF EXISTSDROP OPERATOR FAMILY 中的正确工作(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,使其转储自动生成类型(如表行类型)之间的用户定义转换(Tom Lane)

  • 修复 pg_dump 中外部服务器名称漏加引号的问题(Tom Lane)

  • pg_upgrade 的若干修复(Bruce Momjian)

    正确处理排他约束、避免 Windows 上的失败、不再对 8.4 数据库中不匹配的 toast 表名报错。

  • 在 PL/pgSQL 中,允许外部表定义行类型(Alexander Soudakov)

  • 修正 PL/Perl 函数结果的转换(Alex Hunsaker、Tom Lane)

    恢复 9.1 之前的行为:返回 void 的 PL/Perl 函数忽略其最后一条 Perl 语句的结果值;9.1.0 在该语句返回引用时会抛出错误。同时,确保可以为组合类型返回字符串值,只要该字符串符合该类型的输入格式。此外,当函数声明的结果类型不是数组或组合类型时,对分别尝试返回 Perl 数组或哈希的做法抛出错误。(9.1 之前的版本在这种情况下会返回诸如 ARRAY(0x221a9a0)HASH(0x221aa90) 之类毫无用处的字符串。)

  • 确保 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)

  • 更改所有 contrib 扩展脚本文件,使其在被喂给 psql 时报告有用的错误消息(Andrew Dunstan、Tom Lane)

    这应有助于让人们了解使用 CREATE EXTENSION 加载这些文件的新方法。大多数情况下,直接载入脚本本来就会失败,只是错误消息更难理解。

  • 修复 contrib/dict_intcontrib/dict_xsyn 中的错误编码(Tom Lane)

    一些函数错误地假定 palloc() 返回的内存保证被清零。

  • contrib/sepgsql 测试从常规回归测试机制中移除(Tom Lane)

    由于这些测试的设置需要 root 权限,自动运行不现实。改为手工方式,并提供一个测试脚本来协助。

  • 修复 contrib/unaccent 配置文件解析中的若干错误(Tom Lane)

  • pgstatindex() 及时响应查询取消中断(Robert Haas)

  • 修复 macOS 启动脚本中日志文件名的不正确引号(Sidar Lopez)

  • 撤销无意中启用的 WAL_DEBUG(Robert Haas)

    幸运的是,就调试工具而言,这个相当廉价;但它并不打算默认启用,因此撤销。

  • 确保 VPATH 构建正确安装所有服务器头文件(Peter Eisentraut)

  • 缩短详细错误消息中报告的文件名(Peter Eisentraut)

    常规构建一直只报告包含错误消息调用的 C 文件的名称,但 VPATH 构建此前报告绝对路径名。

  • 修复中美洲 Windows 时区名的解释(Tom Lane)

    Central America Standard Time映射为 CST6 而不是 CST6CDT,因为中美洲各地通常不实行夏令时。

  • 把时区数据文件更新为 tzdata 版本 2011n for DST law changes in Brazil, Cuba, Fiji, Palestine, Russia, and Samoa; also historical corrections for Alaska and British East Africa。

提交更正

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