E.41. 版本 9.2.9
发布日期: 2014-07-24
这个版本包含各种自9.2.8以来的修复。关于9.2主版本的新特性信息, 请查看第 E.50 节。
E.41.1. 迁移到版本9.2.9
运行9.2.X版本的用户不需要转储/恢复。
不过,这个版本纠正了一些GiST索引中的索引损坏问题。 查看下面的第一条修改日志项找出你的安装是否受到了影响, 和受到影响后要采取的步骤。
另外,如果你是从一个早于9.2.6的版本升级而来, 请查看第 E.44 节。
E.41.2. 修改列表
-
正确的初始化bit字段上contrib/btree_gist 索引中的填充字节 (Heikki Linnakangas)
这个错误会导致不正确的查询结果,因为值应该是比较相等而不是看做相等。 在bit或bit varying字段上拥有GiST索引的用户应该在安装这个更新之后 REINDEX这些索引。
-
在删除GIN列表页时保护页面不被撕裂 (Heikki Linnakangas)
如果在将页更新写入磁盘时发生了系统崩溃,则该修复阻止了可能的索引损坏。
-
在从WAL重放更新时,不要清理GiST索引页的右连接 (Heikki Linnakangas)
这个错误会导致在热备份上执行的GiST索引扫描瞬态的错误回复。
修复插入SP-GiST文本索引期间极端情况下的无限循环 (Tom Lane)
修复在运行中关闭hot_standby_feedback时的回复状态 (Simon Riggs)
修复嵌套调用
ReceiveSharedInvalidMessages
期间, 可能不正确的缓存失效 (Andres Freund)-
修复规划器对嵌套的嵌套循环规划中生成的嵌套的PlaceHolderVars的错误处理 (Tom Lane)
这个疏忽会导致"variable not found in subplan target lists"错误,或错误的查询结果。
修复UNION ALL子查询从有继承子表的表中读取时, "could not find pathkey item to sort"的规划器失败 (Tom Lane)
-
如果在子查询的目标列表中有一个设置返回函数, 则不要假设它的输出是唯一的 (David Rowley)
这个疏忽会导致像WHERE x IN (SELECT y, generate_series(1,10) FROM t GROUP BY y)这样的构造错误的最优化。
-
改善规划器,在可能时删除AND/OR 的常量NULL输入 (Tom Lane)
这个修改修复了一些情况,9.2及更高版本越积极的替换参数, 比较老版本生成的规划越糟糕。
-
修复
to_json()
和相关函数中输入类型类别的识别 (Tom Lane)已经知道这会导致在JSON结果中不适当的引用money字段, 并且其他数据类型也可能有错误结果。
-
修复构造类型的复合元素中未能detoast字段 (Tom Lane)
这纠正了TOAST指针在没有解引用时就被拷贝到其他表的情况。 如果稍后删除了原始数据,那么在使用现在的悬摆指针时, 会导致像"missing chunk number 0 for toast value ..."这样的错误。
修复整行引用作为附加计划节点的输出时, "record type has not been registered"失败 (Tom Lane)
修复倒回一个游标时调用用户定义的函数时可能的崩溃 (Tom Lane)
修复计算FROM中的函数参数时,查询寿命内存泄露 (Tom Lane)
修复正则表达式处理中的会话寿命内存泄露 (Tom Lane, Arthur O'Dwyer, Greg Stark)
修复hungarian.stop中的数据编码错误 (Tom Lane)
在default_with_oids为真时, 阻止带有OIDS创建外表 (Etsuro Fujita)
-
修复在当前事务中插入,然后被现在回滚的子事务删除的行的活跃度检查 (Andres Freund)
如果稍后在同一个事务中执行了CREATE INDEX或CLUSTER, 那么会导致问题(至少是严重警告,最坏是无限循环)。
-
在PREPARE TRANSACTION期间清理 pg_stat_activity.xact_start (Andres Freund)
在PREPARE之后,原始的会话不再存在于事务当中, 所以它不应该继续显示事务的开始时间。
修复REASSIGN OWNED,不为文本搜索对象失败 (Álvaro Herrera)
-
在主服务器启动期间闭塞信号 (Tom Lane)
这确保了,比如,主服务器在启动时它自己收到SIGINT之后将正确的清理。
-
修复处理声明主机名而不是IP地址的pg_hba.conf项时, 客户端主机名的查找 (Tom Lane)
确保报告反DNS查找失败,而不只是默默的不匹配这样的项。 还要确保每个连接只有一个反DNS查找尝试,而不是每个主机名, 这是查找尝试失败时以前发生的情况。
-
允许根用户使用postgres -C variable和 postgres --describe-config (MauMau)
作为根用户启动服务器的禁令不需要扩展这些操作, 并且放开它阻止了某些情况下pg_ctl的失败。
-
在make check期间启动临时主服务器的安全的Unix域套接字 (Noah Misch)
任何可以访问套接字文件的本地用户都可以作为服务器的引导超级用户连接, 然后继续执行任意代码作为操作系统用户运行测试, 就像我们之前在CVE-2014-0067提到的那样。 这个修改通过在临时文件、/tmp的模式为0700的子目录中替换服务器的套接字, 防卫了风险。在不支持Unix套接字的平台上,尤其是Windows,仍然存在风险, 因为临时主服务器必须接受本地TCP连接。
这个修改一个有用的副作用是简化了重写DEFAULT_PGSOCKET_DIR 的建立中的make check测试。流行的非缺省值, 像/var/run/postgresql,通常是不能由建立用户所写的, 请求绕开将不再是必须的了。
修复表空间创建WAL重放,使其在Windows上可以工作 (MauMau)
修复Windows上套接字创建失败的检测 (Bruce Momjian)
-
在Windows上,允许新的会话从配置文件中吸收PGC_BACKEND参数的值 (比如log_connections) (Amit Kapila)
以前,如果这样的参数在文件启动之后做了修改,则该修改将没有任何作用。
-
在Windows上正确的引用可执行路径名 (Nikhil Deshpande)
这个疏忽会导致initdb和pg_upgrade 在Windows上失败,如果该安装路径包含空格和@符号。
-
修复OS X上的libPython连接 (Tom Lane)
以前我们使用的方法在Xcode 5.0及以后版本提供的Python库上会失败。
-
当服务器持续以比客户端吸收的速度更快的速度发送数据时, 避免libpq中的缓冲区膨胀 (Shin-ichi Morita, Tom Lane)
可以强制libpq扩大它的输入缓冲区,直到用完内存 (这将会误导的报告为"lost synchronization with server")。 在普通情况下,很难达到数据持续发送的速度比
recv()
循环可以吸收的速度快,但是在客户端通过调度器的约束人工变慢之后, 可以观察到这种现象。 确保libpq中的LDAP查找尝试像预期的那样超时 (Laurenz Albe)
修复ecpg,当char *类型的数组是返回多于一行的FETCH语句的目标时, ecpg做正确的事情,还有一些其他数组处理的修复 (Ashutosh Bapat)
-
修复pg_restore对老风格的大对象注释的处理 (Tom Lane)
如果pg_dump 9.0以前的版本生成的归档文件包含几个大对象的注释, 则从该归档文件直接到数据库的恢复通常会失败。
-
修复新服务器创建TOAST表但是老版本不创建的pg_upgrade的情况 (Bruce Momjian)
这个罕见情况会显示为"relation OID mismatch"错误。
-
阻止contrib/auto_explain修改用户的EXPLAIN输出 (Tom Lane)
如果auto_explain是活动的,它会导致 EXPLAIN (ANALYZE, TIMING OFF)命令打印时间信息。
修复contrib/dblink中的查询寿命内存泄露 (MauMau, Joe Conway)
在contrib/pgcrypto函数中,确保在返回前从堆栈变量中清理了敏感信息 (Marko Kreen)
阻止在contrib/pgstattuple的
pgstat_heap()
中使用早已释放的内存 (Noah Misch)-
在contrib/uuid-ossp中,在调用间缓存OSSP UUID库的状态 (Tom Lane)
这提高了UUID生成的效率,并减少了从/dev/uranDOM获得的熵的数量, 在拥有它们的平台上。
更新时区数据文件到tzdata版本2014e, 因为DST规律在Crimea、Egypt和Morocco发生了改变。