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

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

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

E.21. 版本 9.4.6 #

发布日期:. 2016-02-11

本发行版包含对 9.4.5 的多项修复。有关 9.4 主版本中新功能的信息,请参见第 E.27 节

E.21.1. 迁移到版本 9.4.6

对于运行 9.4.X 的用户,不需要转储/恢复。

但是,如果你要升级的安装中包含任何使用(非默认的)jsonb_path_ops操作符类的 GIN 索引,请参见下面的第一条变更日志条目。

另外,如果你是从早于 9.4.4 的版本升级,请参见第 E.23 节

E.21.2. 变更

  • 修复jsonb_path_opsGIN 索引中不一致的哈希计算(Tom Lane)

    在处理同一嵌套层级同时包含标量和子对象的jsonb值(例如同时包含标量和子数组的数组)时,键哈希值的计算方式可能与同一键在其他上下文中的计算方式不同。这可能导致查询找不到本应找到的条目。修复该问题意味着现有索引可能与新的哈希计算代码不一致。用户在安装此更新后应当对jsonb_path_opsGIN 索引执行REINDEX,以确保所有搜索按预期工作。

  • 修复正则表达式中的无限循环和缓冲区越界问题(Tom Lane)

    方括号表达式中非常大的字符范围在某些情况下可能导致无限循环,在另一些情况下可能导致内存覆写。(CVE-2016-0773)

  • 如果postmaster.pid文件被移除则执行立即关闭(Tom Lane)

    postmaster 现在大约每分钟检查一次postmaster.pid是否仍然存在且仍包含自己的 PID。如果不是,它会执行立即关闭,就像收到SIGQUIT一样。此变更的主要目的是确保失败的 buildfarm 运行无需人工干预即可被清理;同时也可在 DBA 强行删除postmaster.pid并启动新 postmaster 时限制不良影响。

  • SERIALIZABLE事务隔离模式下,插入期间的竞争条件可能导致漏掉串行化异常(Kevin Grittner、Thomas Munro)

  • 修复对非日志关系执行ALTER TABLE ... SET TABLESPACE时未发出适当 WAL 记录的问题(Michael Paquier、Andres Freund)

    尽管关系的数据是非日志的,但移动操作本身必须被记录,否则在备库提升为主库后该关系将不可访问。

  • 修复崩溃恢复结束时未日志关系可能初始化不当的问题(Andres Freund、Michael Paquier)

  • 确保 walsender 槽位在重用时被完全重新初始化(Magnus Hagander)

  • 修复 ALTER COLUMN TYPE 使其正确重建继承的检查约束(Tom Lane)

  • 修复 REASSIGN OWNED 使其正确更改组合类型的所有权(Álvaro Herrera)

  • 修复 REASSIGN OWNEDALTER OWNER,使其在更改数据类型、外部数据包装器或外部服务器的所有者时正确更新已授予权限列表(Bruce Momjian, Álvaro Herrera)

  • 修复 REASSIGN OWNED 使其忽略外部用户映射而不是失败(Álvaro Herrera)

  • 修复对可更新视图进行查询重写后可能崩溃的问题(Stephen Frost)

  • 修复规划器对 LATERAL 引用的处理(Tom Lane)

    这修复了一些导致 failed to build any N-way joinscould not devise a query plan 规划器错误的极端情况。

  • 当 GIN 索引的内部统计信息非常过时时,为其扫描的错误规划器代价估计增加更多防御(Tom Lane)

  • 使规划器能处理索引顾问插件建议的假想 GIN 索引(Julien Rouhaud)

  • 加速 EXPLAIN 和规则转储中唯一表别名的生成,并确保生成的别名不超过 NAMEDATALEN(Tom Lane)

  • 修复 ROW()VALUES() 列表中整行 Var 的转储(Tom Lane)

  • 把负无穷日期和时间戳转换为 jsonjsonb 时曾错误地将其呈现为正无穷(Tom Lane)

  • 修复 numeric 除法中可能的内部溢出(Dean Rasheed)

  • 修复正则表达式先行约束中括号内限制的执行(Tom Lane)

    根据手册,先行约束不允许包含反向引用,且其中的括号始终被视为非捕获括号。但代码未能正确处理括号子表达式内的这些情况,会给出意外的结果。

  • 把正则表达式转换为索引扫描边界时,可能从包含先行约束的正则表达式产生错误的边界(Tom Lane)

  • 修复正则表达式编译器使其处理约束弧构成的环(Tom Lane)

    为 CVE-2007-4772 添加的代码既不完整——未能处理涉及多个状态的环——又不正确——可能导致断言失败(不过在非断言构建中似乎没有不良后果)。多状态环会使编译器一直运行,直到查询被取消或达到状态数过多的错误条件。

  • 改进正则表达式编译器中的内存用量统计(Tom Lane)

    这使代码在一些以前耗费不合理时间和内存量的情况下发出 regular expression is too complex 错误。

  • 改进正则表达式编译器的性能(Tom Lane)

  • 使 log_line_prefix 中的 %h%r 转义对因 log_connections 而发出的消息也生效(Tom Lane)

    以前,%h/%r 要等到新会话发出connection received日志消息之后才开始生效;现在它们对该消息也生效。

  • 在 Windows 上,确保不需要共享内存映射句柄的子进程关闭该句柄(Tom Lane、Amit Kapila)

    只要 logging_collector 处于开启状态,这一疏忽就会导致无法从崩溃中恢复。

  • 修复 Windows 上非阻塞模式下可能无法检测套接字 EOF 的问题(Tom Lane)

    目前尚不完全清楚此问题是否会在 9.5 之前的分支中发生,但如果发生,其症状将是 walsender 进程无限等待而不是察觉到连接丢失。

  • 避免 SSPI 身份验证期间泄漏令牌句柄(Christian Ullrich)

  • psql 中,确保当终端窗口大小改变时更新 libreadline 所认知的屏幕尺寸(Merlin Moncure)

    此前,如果窗口在查询输出期间被调整大小,libreadline 不会察觉,导致之后输入多行查询时出现奇怪的行为。

  • 修复 psql\det 命令,使其以与其他可能带模式限定模式的 \d 命令相同的方式解释模式参数(Reece Hart)

  • 避免 psql\c 命令在先前连接经由 Unix 套接字、而命令指定了新的主机名和相同用户名时可能出现的崩溃(Tom Lane)

  • pg_ctl start -w 中,直接测试子进程状态而不是依赖启发式方法(Tom Lane、Michael Paquier)

    此前,pg_ctl 依赖一个假设:新的 postmaster 总会在五秒内创建 postmaster.pid。但在高负载系统上这可能失败,导致 pg_ctl 错误地报告 postmaster 启动失败。

    除 Windows 外,此变更还意味着紧接另一个此类命令之后执行的 pg_ctl start -w 现在会可靠地失败,而此前如果在第一条命令后两秒内执行则会报告成功。

  • pg_ctl start -w 中,不再尝试使用通配监听地址连接 postmaster(Kondo Yuta)

    在 Windows 上,如果 listen_addresses 被设置为 0.0.0.0::pg_ctl 将无法检测到 postmaster 的启动,因为它会试图原样使用该值作为要连接的地址,而这行不通。现在改为假定应分别使用 127.0.0.1::1

  • 在 Windows 上的 pg_ctl 中,通过检查服务状态来决定输出发送到哪里,而不是检查标准输出是否为终端(Michael Paquier)

  • pg_dumppg_basebackup 中,采用 GNU 约定来处理超过 8GB 的 tar 归档成员(Tom Lane)

    tar 文件格式的 POSIX 标准不允许归档成员文件超过 8GB,但大多数现代 tar 实现支持解决此问题的扩展。采用这一扩展后,pg_dump 使用 -Ft 时不再在数据超过 8GB 的表上失败,pg_basebackup 也能处理大于 8GB 的文件。此外,还修复了一些可移植性问题,它们可能在某些平台上导致 4GB 到 8GB 之间的成员失败。这些问题有可能因备份文件不可读而造成不可恢复的数据丢失。

  • 修复 pg_dump 处理扩展成员对象时的若干边界 bug(Tom Lane)

  • 使 pg_dump 把视图的触发器标记为需要在其规则之后处理,以防止并行 pg_restore 期间可能出现的失败(Tom Lane)

  • 确保在 pg_dump 中正确引用关系选项值(Kouhei Sutou、Tom Lane)

    不是简单标识符或数字的 reloption 值可能因 pg_dump 发出的 CREATE 语句中的语法错误而导致转储/重载失败。核心 PostgreSQL 目前支持的任何 reloption 都不存在此问题,但扩展可能允许导致该问题的 reloption。

  • 避免并行 pg_dump 期间重复的口令提示(Zeus Kronion)

  • 修复 pg_upgrade 的文件复制代码,使其在 Windows 上正确处理错误(Bruce Momjian)

  • pgbench 中加入防护,防止计算脚本指定的除法或取模运算符期间的边界溢出情况(Fabien Coelho、Michael Paquier)

  • 修复 pg_receivexlogpg_recvlogical 发出的消息未能本地化的问题(Ioseph Kim)

  • 避免同时使用 plpython2plpython3 时的转储/重载问题(Tom Lane)

    原则上,两个版本的 PL/Python 可以在同一个数据库中使用,但不能在同一个会话中使用(因为两个版本的 libpython 无法安全地并发使用)。然而,pg_restorepg_upgrade 都会做一些可能触犯同会话限制的事情。通过更改检查的时机来规避这一点。

  • 修复 PL/Python 回归测试,使其在 Python 3.5 下通过(Peter Eisentraut)

  • 修复看到套接字 EOF 时过早清空 libpq 输入缓冲区的问题(Tom Lane)

    这一错误导致 libpq 有时在报告 server closed the connection unexpectedly 之前未能报告后端的最终错误消息。

  • 防止某些 PL/Java 参数被非超级用户设置(Noah Misch)

    此变更缓解了 PL/Java 的一个安全 bug(CVE-2016-0766),该 bug 在 PL/Java 中已通过把这些参数标记为仅超级用户可用来修复。为了保护那些更新 PostgreSQLPL/Java 更频繁的站点,核心代码现在也识别这些参数。

  • 改进 libpq 对内存不足情况的处理(Michael Paquier、Amit Kapila、Heikki Linnakangas)

  • 修复 ecpg 生成的 typedef 语句中参数的顺序(Michael Meskes)

  • ecpgPGTYPESnumeric_from_double() 中使用 %g 而非 %f 格式(Tom Lane)

  • 修复 ecpg 提供的头文件,使其不包含从预处理指令行延续到下一行的注释(Michael Meskes)

    这样的注释会被 ecpg 拒绝。尚不清楚是否应该更改 ecpg 本身。

  • 修复 hstore_to_json_loose()hstore 值能否转换为 JSON 数字的测试(Tom Lane)

    以前该函数可能被尾部的非字母数字字符欺骗,导致输出语法无效的 JSON。

  • 确保 contrib/pgcryptocrypt() 函数可被查询取消中断(Andreas Karlsson)

  • 修复contrib/postgres_fdw中在数据修改命令中使用tableoid触发的缺陷(Etsuro Fujita、Robert Haas)

  • 接受晚于 2.5.x 的flex版本(Tom Lane、Michael Paquier)

    由于 flex 2.6.0 已发布,需要调整构建脚本中的版本检查。

  • 通过确保以固定顺序向链接器提供文件名,提高构建输出的可重现性(Christoph Berg)

    这避免了产生的可执行文件在不同构建之间可能出现按位差异。

  • 将我们的missing脚本安装到 PGXS 构建能找到的位置(Jim Nasby)

    这使得在缺少bison等构建工具的机器上进行 PGXS 构建时能有合理的行为。

  • 确保 MSVC 构建中安装的头文件包含dynloader.h(Bruce Momjian、Michael Paquier)

  • 新增变体回归测试期望输出文件,以匹配当前libxml2的行为(Tom Lane)

    libxml2对 CVE-2015-7499 的修复导致它在某些过去会输出错误上下文报告的情况下不再输出。这似乎是一个缺陷,但我们可能不得不在一段时间内接受它,因此做了变通处理。

  • 将时区数据文件更新到tzdata发行版 2016a,以反映开曼群岛、梅特拉卡特拉和外贝加尔边疆区的夏令时法规变更,以及巴基斯坦的历史修正。

提交更正

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