E.132. 版本 8.4.22

E.132.1. 迁移到版本 8.4.22
E.132.2. 修改列表

发布日期:. 2014-07-24

这个版本包含自8.4.21以来的各种修复。 关于8.4主版本的新特性信息,请查看第 E.154 节

这预计是PostgreSQL在8.4.X系列的最后一个版本。 建议用户尽快更新到最新的版本。

E.132.1. 迁移到版本 8.4.22

运行8.4.X的用户不需要转储/恢复。

这个版本纠正了在一些GiST索引中索引损坏的问题。查看下面第一条修改日志项, 找出你的安装是否受到影响和应该采取什么步骤。

另外,如果你是从一个早于8.4.19的版本升级而来,请查看第 E.135 节

E.132.2. 修改列表

  • 正确的初始化bit字段上contrib/btree_gist 索引里的填充字节 (Heikki Linnakangas)

    这个错误由于值应该是比较相等而不是看做相等而导致不正确的查询结果。 在bitbit varying字段上拥有GiST索引的用户应该在安装此次更新后 REINDEX这些索引。

  • 在删除GIN列表页时防止页面破损 (Heikki Linnakangas)

    如果系统崩溃发生在页更新正在写入磁盘时,这个修复阻止了可能的索引损坏。

  • 修复嵌套调用ReceiveSharedInvalidMessages期间, 可能不正确的缓存失效 (Andres Freund)

  • 如果子查询的目标列表中有一个设置-返回函数,那么不要假设它的输出是唯一的 (David Rowley)

    这个疏忽可能会导致错误的最佳化像 WHERE x IN (SELECT y, generate_series(1,10) FROM t GROUP BY y)这样的构造。

  • 修复结构化类型的复合元素中未能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)

  • 修复对插入到当前事务中然后被一个新回滚的子事务删除的行的活跃度检查 (Andres Freund)

    如果稍后在相同的事务中执行CREATE INDEXCLUSTER, 这会导致问题(至少是虚假警告,最坏是一个无限循环)。

  • PREPARE TRANSACTION期间清理 pg_stat_activity.xact_start (Andres Freund)

    PREPARE之后,原始的会话不再在事务中, 所以它应该不能继续显示会话的开始时间。

  • 修复REASSIGN OWNED,文本搜索对象不会失败 (Álvaro Herrera)

  • 在postmaster启动期间封锁信号 (Tom Lane)

    这保证了postmaster在仍然启动时,例如,收到SIGINT 之后能够正确的清理。

  • 保护在make check期间启动的临时postmasters的Unix域套接字 (Noah Misch)

    任何可以访问该套接字文件的本地用户都可以作为服务器的bootstrap超级用户连接, 然后如同操作系统用户运行测试一样继续执行任意代码,就像我们之前在 CVE-2014-0067观察到的那样。这个修改通过在一个临时文件中存放服务器的套接字防止该风险, 临时文件是/tmp的子目录,模式0700。 在不支持Unix套接字的平台上仍然存在该风险,尤其是Windows, 因为临时postmaster必须接受本地TCP连接。

    这个修改的一个有用的副作用是简化了重载DEFAULT_PGSOCKET_DIR 建立中的make check测试。像/var/run/postgresql 这样的普通非缺省值通常不是建立用户可写的,将不再需要请求绕开它。

  • 在Windows上,允许新的会话接收来自配置文件的PGC_BACKEND 参数(比如log_connections)的值 (Amit Kapila)

    以前,如果这样的参数在文件启动之后修改,那么该修改将不会有任何影响。

  • 在Windows中正确的引用可执行的路径名 (Nikhil Deshpande)

    如果安装路径包含空白和@符号,会导致initdbpg_upgrade在Windows上失败,。

  • 修复macOS上的libpython链接 (Tom Lane)

    我们之前使用的方法在使用Xcode 5.0及更高版本提供的Python库时会失败。

  • 当服务器发送数据速度持续比客户端可接受的速度快时, 避免libpq中的缓冲区膨胀 (Shin-ichi Morita, Tom Lane)

    libpq可以强制扩大它的输入缓冲区,直到它内存溢出 (它可能会误报为丢失与服务器的同步)。在普通情况下, 它可以持续的比recv()循环更快的传输数据,因此可以吸收数据, 但是通过调节约束人工的降低客户端速度是,可以观察到这种现象。

  • 确保libpq中的LDAP查找尝试像预计的那样超时 (Laurenz Albe)

  • 修复pg_restore对老旧风格的大对象注释的处理 (Tom Lane)

    如果9.0之前版本的pg_dump生成的归档包含几个大对象的注释, 那么从该归档文件直接到数据库的恢复通常会失败。

  • contrib/pgcrypto函数中,确保在返回之前清理堆栈变量中的敏感信息 (Marko Kreen)

  • contrib/uuid-ossp中,在调用间缓存OSSP UUID库的状态 (Tom Lane)

    这提高了UUID产生的效率并降低了从/dev/urandom 中提取熵的数量,在拥有它们的平台上。

  • 更新时区数据文件到tzdata版本2014e, 因为DAT规则在Crimea、Egypt和Morocco发生了改变。