pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
发布日期:. 2016-02-11
本发行版包含对 9.4.5 的多项修复。有关 9.4 主版本中新功能的信息,请参见第 E.27 节。
对于运行 9.4.X 的用户,不需要转储/恢复。
但是,如果你要升级的安装中包含任何使用(非默认的)jsonb_path_ops操作符类的 GIN 索引,请参见下面的第一条变更日志条目。
另外,如果你是从早于 9.4.4 的版本升级,请参见第 E.23 节。
修复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 OWNED 和 ALTER OWNER,使其在更改数据类型、外部数据包装器或外部服务器的所有者时正确更新已授予权限列表(Bruce Momjian, Álvaro Herrera)
修复 REASSIGN OWNED 使其忽略外部用户映射而不是失败(Álvaro Herrera)
修复对可更新视图进行查询重写后可能崩溃的问题(Stephen Frost)
修复规划器对 LATERAL 引用的处理(Tom Lane)
这修复了一些导致 “failed to build any N-way joins” 或 “could not devise a query plan” 规划器错误的极端情况。
当 GIN 索引的内部统计信息非常过时时,为其扫描的错误规划器代价估计增加更多防御(Tom Lane)
使规划器能处理索引顾问插件建议的假想 GIN 索引(Julien Rouhaud)
加速 EXPLAIN 和规则转储中唯一表别名的生成,并确保生成的别名不超过 NAMEDATALEN(Tom Lane)
修复 ROW() 和 VALUES() 列表中整行 Var 的转储(Tom Lane)
把负无穷日期和时间戳转换为 json 或 jsonb 时曾错误地将其呈现为正无穷(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_dump 和 pg_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_receivexlog 和 pg_recvlogical 发出的消息未能本地化的问题(Ioseph Kim)
避免同时使用 plpython2 和 plpython3 时的转储/重载问题(Tom Lane)
原则上,两个版本的 PL/Python 可以在同一个数据库中使用,但不能在同一个会话中使用(因为两个版本的 libpython 无法安全地并发使用)。然而,pg_restore 和 pg_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 中已通过把这些参数标记为仅超级用户可用来修复。为了保护那些更新 PostgreSQL 比 PL/Java 更频繁的站点,核心代码现在也识别这些参数。
改进 libpq 对内存不足情况的处理(Michael Paquier、Amit Kapila、Heikki Linnakangas)
修复 ecpg 生成的 typedef 语句中参数的顺序(Michael Meskes)
在 ecpg 的 PGTYPESnumeric_from_double() 中使用 %g 而非 %f 格式(Tom Lane)
修复 ecpg 提供的头文件,使其不包含从预处理指令行延续到下一行的注释(Michael Meskes)
这样的注释会被 ecpg 拒绝。尚不清楚是否应该更改 ecpg 本身。
修复 hstore_to_json_loose() 对 hstore 值能否转换为 JSON 数字的测试(Tom Lane)
以前该函数可能被尾部的非字母数字字符欺骗,导致输出语法无效的 JSON。
确保 contrib/pgcrypto 的 crypt() 函数可被查询取消中断(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 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。