企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# E.6\. 版本9.2.2 > **发布日期:** 2012-12-06 这个版本包含9.2.1的各种修复。有关9.2主要版本的新功能的信息,参阅 [Section E.8](#calibre_link-137)。 ## E.6.1\. 迁移到版本9.2.2 为了运行9.2.X不需要转储/恢复。 然而,你可能需要执行`REINDEX`操作以调整并发建立索引问题, 正如下面描述的第一个changelog项。 同时,如果你正在从版本9.2.0更新,那么请参阅9.2.1的发布说明。 ## E.6.2\. 变化 * 修复与`CREATE/DROP INDEX CONCURRENTLY`相关的多个错误(Andres Freund, Tom Lane, Simon Riggs, Pavan Deolasee) 当在`CREATE INDEX CONCURRENTLY`最初阶段添加`DROP INDEX CONCURRENTLY` 允许不正确索引决定,引入错误;因此通过该命令建立的索引可能败坏。 在应用该更新后推荐使用`CREATE INDEX CONCURRENTLY`在9.2.X中重新建立索引。 另外,当改变索引的`pg_index`行状态时,修复`CREATE/DROP INDEX CONCURRENTLY`使用合适更新。 这避免竞争条件导致并发会话错过更新目标索引,因此再次导致败坏同时创建索引。 同时,修复各种其他操作以确保他们忽略了 一个来自失败的`CREATE INDEX CONCURRENTLY`命令的无效索引。最重要的是`VACUUM`, 因为在采用调整动作以修复或者删除无效索引之前在表上可以很容易启动自动清理。 同时修复`DROP INDEX CONCURRENTLY`用来不禁用 插入到目标索引直到所有查询使用它。 如果取消`DROP INDEX CONCURRENTLY`:先前编码可以留下未删除的索引,修复不正当操作。 * 为了`DROP INDEX CONCURRENTLY`调整谓词锁 (Kevin Grittner) 先前,在错误的时间处理SSI谓词锁,可能导致与`DROP`并行执行的可串行化事务不正确操作。 * 在WAL回放期间修复缓冲区锁定(Tom Lane) 当回放WAL记录影响超过一页时,那么WAL回放编码不能仔细锁定缓冲区。这可能导致 热备份查询瞬时看到不一致状态,导致错误结果或者意外失败。 * 修复GIN索引在WAL产生逻辑中的错误(Tom Lane) 这可能导致索引败坏,如果发生破损页失败。 * 修复SP-GiST索引在WAL回放逻辑错误(Tom Lane) 这可能导致崩溃后索引败坏,或者是在备用服务器上。 * 在WAL恢复期间修复基础备份位置的不正确检查(Heikki Linnakangas) 数据库达到一致状态之前该错误允许热备份模式启动。 * 当推动热备服务器正常运行时,正常删除启动进程的虚拟XID锁(Simon Riggs) 该监督可以防止某种操作的后续执行比如`CREATE INDEX CONCURRENTLY`。 * 避免备用模式中假冒的"失序时间线ID"错误(Heikki Linnakangas) * 在它接收到关机信号之后阻止postmaster发起新的子进程(Tom Lane) 该错误可能导致比较长的关闭,或者即使从来没有完成没有额外用户操作。 * 当`log_rotation_age`超过2^31毫秒时(大约25天),那么修复syslogger进程而不会失败。(Tom Lane) * 当请求的超时过期的时候,那么修复`WaitLatch()`以及时返回(Jeff Janes, Tom Lane) 与以前的编码,非等待终止中断的稳定流可能会延迟从`WaitLatch()` 无限期的返回。这已被证明是一个自动清理发射进程中的问题, 可能会导致其他地方的麻烦。 * 当内存不足的时候避免内部哈希表的败坏(Hitoshi Harada) * 防止已删除表文件描述符在以前事务结束中保持打开(Tom Lane) 这应该减少长期以来已删除的表继续占用磁盘空间问题。 * 当一个新的子进程无法为它的闭锁创建一个管道的时候,防止数据库端的崩溃和重启(Tom Lane) 虽然新的进程失败了,没有充分的理由强迫数据库端重新启动, 所以要避免。当内核差不多超出文件描述符的时候,这提高了鲁棒性。 * 避免与加入不平的子查询的规划器崩溃(Tom Lane) * 修复外连接上的非严格等价从句的规划(Tom Lane) 规划器可以获得来自分句等同于 其他一些的非严格构建的不正确的约束,例如 `WHERE COALESCE(foo, 0) = 0`, 当`foo`来自外连接的空侧。 9.2显示了比以前的版本更多的情况下的这种类型错误, 但是基本的错误已经有很长时间。 * 使用继承树上的索引优化`MIN`/`MAX`修复`SELECT DISTINCT` (Tom Lane) 该计划在给定的这些因素的结合"未能重新找到MinMaxAggInfo记录"可能失败。 * 确保规划器将隐式和显式转换出于所有目的看作等效的, 除了少数情况下实际上是一个语义差异(Tom Lane) * 当考虑是否部分索引可用于查询时,包含join子句(Tom Lane) 严格的join子句可以充分建立一个 `_x_` `IS NOT NULL`断言,比如。 修复9.2中的规划器回归分析,因为先前版本可能做了可比较推理。 * 当同一索引中有很多可索引join子句时,限制规划器时间的增长(Tom Lane) * 提高规划器的能力以证明等价类的排除约束(Tom Lane) * 修复散列子规划中的部分行匹配以正确处理交叉类型例子(Tom Lane) 这影响到多列`NOT IN`子规划,比如`WHERE (a, b) NOT IN (SELECT x, y FROM ...)` 当例如`b`和`y`分别为`int4`和`int8`时。 这个错误导致错误结果或依据所涉及的具体数据类型崩溃。 * 修复btree 标记/恢复函数以处理数组键(Tom Lane) 这种疏忽可能导致来自 内侧是使用`_indexed_column_` = ANY(`_array_`)条件的索引扫描的合并联接中的错误结果。 * 为采用更少快照恢复补丁(Tom Lane) 减少查询执行中采取的快照数的9.2变化 导致一些在以前版本中没有见过的异常行为, 因为执行会继续在锁定查询使用的表之前获得的一个快照。 因此,例如,查询将不保证能够看到前面事务提交的更新 即使该事务有排他锁。我们可能会在未来版本中重新审视它,但同时把它以9.2之前方式放回到原处。 * 当为`AFTER ROW UPDATE/DELETE`触发器重新读取旧的元组时,获取缓冲锁(Andres Freund) 在十分特殊的情况下,这可能会导致传递 不正确的数据到一个触发器`WHEN`条件, 或对一个外键执行触发器重新检测逻辑。 这可能导致崩溃,或在错误决定情况下触发触发器。 * 修复`ALTER COLUMN TYPE`正确处理继承的检查约束(Pavan Deolasee) 这在以前8.4版本中正常工作,并且现在在8.4及以后版本中也正常工作。 * 修复`ALTER EXTENSION SET SCHEMA`的错误以移动一些附属对象到新模式中(Álvaro Herrera, Dimitri Fontaine) * 在扩展查询协议中正确处理`CREATE TABLE AS EXECUTE` (Tom Lane) * 不要在`DROP RULE IF NOT EXISTS` and `DROP TRIGGER IF NOT EXISTS`中修改输入解析树(Tom Lane) 如果重新执行这些类型之一的已缓存语句,那么可能产生错误。 * 修复`REASSIGN OWNED`处理表空间上的授权(Álvaro Herrera) * 忽略视图系统列错误的`pg_attribute`项(Tom Lane) 视图没有任何系统列。然而,当转换表到视图时我们忘了 删除该项。在9.3以及以后被正确修复,但在以前的分支中我们需要防卫 现有的错误转换视图。 * 修复规则输出以正确转储`INSERT INTO` `_table_`DEFAULT VALUES(Tom Lane) * 当在一个查询中有太多`UNION`/`INTERSECT`/`EXCEPT`子句时,防止堆栈溢出(Tom Lane) * 当使用-1区分尽可能低的整数值时,避免平台相关错误(Xi Wang, Tom Lane) * 修复日期分析中可能访问以前的字符串末尾(Hitoshi Harada) * 如果在检查点期间发生XID概括并且`wal_level`是`hot_standby`, 那么修复错误以提前XID时代(Tom Lane, Andres Freund) 当这个错误对PostgreSQL自身没有特别的影响时, 对于依赖于`txid_current()`和相关函数是一个坏的应用:TXID值将出现回退。 * 修复`pg_terminate_backend()`和`pg_cancel_backend()` 不要为非存在的目标过程抛出错误(Josh Kupershmidt) 当通过超级用户调用的时候,该种情况已经按照预期进行,但是当通过普通用户调用的时候并不这样。 * 修复页面边界`pg_stat_replication`.`sync_state`的显示(Kyotaro Horiguchi) * 如果为了Unix域套接字的路径名长度超过特定平台限制, 那么产生可理解的错误消息(Tom Lane, Andrew Dunstan) 以前这可能导致一些无用的东西,比如"域名解析不可恢复故障" * 当发送复合列值给客户端时,修复内存泄露(Tom Lane) * 通过提交时不搜索子事务锁节省一些周期(Simon Riggs) 在事务中持有许多排他锁,这些无效活动可能是相当昂贵的。 * 使得pg_ctl关于读取`postmaster.pid`文件更加健壮(Heikki Linnakangas)。 这将修复竞争条件和可能的文件描述符泄漏。 * 如果提出错误编码数据,并且`client_encoding`设置是客户端编码,比如SJIS, 那么可能在psql中崩溃(Jiang Guiqing) * 在数据不是归档预先数据段中使得pg_dump备份`SEQUENCE SET`项(Tom Lane) 这种修复了`--data-only`和`--section=data`意义之间不良的不一致, 并修复备份被标记为可扩展配置表序列。 * 修复`--clean`模式中`DROP DATABASE`命令的pg_dump的处理(Guillaume Lelarge) 9.2.0开始,`pg_dump --clean`提出`DROP DATABASE`, 根据使用场景这是无用的或者危险的。现在不再是这样了。 这种变化也将修复`--clean`和`--create`的结合以正常运行, 即,发出`DROP DATABASE`然后重新连接 目标数据库之前发出`CREATE DATABASE`。 * 为了循环依赖的视图和没有关系的选项修复pg_dump(Tom Lane) 当视图涉及没有选项不正常工作的情况下的循环依赖时, 先前修复是备份关系选项。它发出`ALTER VIEW foo SET ()`,这是无效的语法。 * 修复通过`tar`输出格式中pg_dump发出的`restore.sql`脚本中的错误(Tom Lane) 该脚本在名字包括大写字母的表上可能失败。同时, 使脚本在`--inserts`模式中和规则COPY模式中能够恢复数据。 * 修复pg_restore接受符合POSIX标准的`tar`的文件(Brian Weaver, Tom Lane) pg_dump的`tar`输出模式的原始编码产生不能与POSIX标准完全一致的文件。 这是9.3版本的修正。这个补丁更新以前的分支,以致于它们会接受 不正确的和正确的格式,为了避免9.3出现的 兼容性问题。 * 修复通过pg_basebackup发出的`tar`文件到符合POSIX标准(Brian Weaver, Tom Lane) * 当给出了数据目录相应路径时,修复pg_resetxlog以正确定位`postmaster.pid`(Tom Lane) 这个错误可能导致pg_resetxlog没有注意到使用数据目录的一个活跃postmaster。 * 修复libpq的`lo_import()`和`lo_export()`函数以正确报告文件I/O错误(Tom Lane) * 修复嵌套结构指针变量的ecpg处理(Muhammad Usama) * 修复ecpg的`ecpg_get_data`函数以正确处理数组(Michael Meskes) * 防止pg_upgrade试图处理系统目录的TOAST表(Bruce Momjian) 当`information_schema`已被删除或重新创建时,这修复了发现的错误。 其他错误也是可能的。 * 通过设置新群集中`synchronous_commit`到`off`提升pg_upgrade性能(Bruce Momjian) * 使得`contrib/pageinspect`的btree页检查函数当检查页时采用缓冲锁(Tom Lane) * 解决`malloc(0)`和`realloc(NULL, 0)`不可移植操作(Tom Lane) 平台上这些调用返回`NULL`,一些代码错误地认为内存不足。 对数据库不包含用户自定义聚合已损坏的pg_dump是已知的。 可能还有其他的情况。 * 确保`make install`为扩展创建`extension`安装目录(Cédric Villemain) 以前,如果在扩展的Makefile中设置`MODULEDIR`,可以省略该步。 * 修复pgxs支持AIX上编译可加载模块(Tom Lane) 编译不在AIX上运行的初始源码树外部模块。 * 为了Cuba, Israel, Jordan, Libya, Palestine, Western Samoa以及Brazil区域中DST变化规律更 新时区数据文件到tzdata版本2012j。