E.48. 版本9.2.2
发布日期: 2012-12-06
这个版本包含9.2.1的各种修复。有关9.2主要版本的新功能的信息,参阅 第 E.50 节。
E.48.1. 迁移到版本9.2.2
为了运行9.2.X不需要转储/恢复。
然而,你可能需要执行REINDEX操作以调整并发建立索引问题, 正如下面描述的第一个changelog项。
同时,如果你正在从版本9.2.0更新,那么请参阅第 E.49 节。
E.48.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 tableDEFAULT 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。