E.22. 版本 9.3.4 #
发行日期:. 2014-03-20
本次发布包含对 9.3.3 的多方面修复。有关 9.3 大版本中新特性的信息,请参见第 E.26 节。.
E.22.1. 迁移到版本 9.3.4
对于运行 9.3.X 的用户,不需要进行转储/恢复。
不过,下面第一条变更日志修复的错误可能在备库服务器上造成了损坏数据。在安装此更新后,用新的基础备份重新初始化备库服务器可能是明智的。
不过,如果你是从早于 9.3.3 的版本升级,请参见第 E.23 节。
E.22.2. 变更
修复锁定已更新元组的 WAL 重放(Andres Freund、[Aacute]lvaro Herrera)
这一错误导致索引扫描找不到已更新的行,使查询结果取决于是否使用索引扫描而不一致。后续处理可能导致约束冲突,因为之前更新的行不会再被后续的索引搜索找到,从而可能允许插入相互冲突的行。由于该错误位于 WAL 重放中,它只会在崩溃恢复期间或备库服务器上显现。重放不当的情况最常见于外键约束引用的表行与引用行的创建并发更新时。
无条件恢复 GIN 元页以避免残缺页风险(Heikki Linnakangas)
虽然这一疏忽理论上可能导致索引损坏,但实际上不太可能造成任何问题,因为 GIN 元页的活动部分小于标准的 512 字节磁盘扇区。
避免在接收
NOTIFY消息期间检查事务提交状态时的竞态条件(Marko Tiikkaja)这防止了这样一种场景:足够快的客户端可能在通知者所做的数据库更新对接收者可见之前就响应通知。
允许在
UPDATE和DELETE命令中引用物化视图(Michael Paquier)此前这类查询会因无法锁定物化视图中的行而失败。
允许正则表达式操作符被查询取消请求提前终止(Tom Lane)
这防止了病态正则表达式长时间不可中断地锁死服务器进程的场景。
移除试图允许
OVERLAPS接受单元素行参数的错误代码(Joshua Yanovski)这段代码从未正确工作过,而且该情况既未被 SQL 标准规定也未被记录,因此移除它似乎比修复它更好。
避免在反解析规则或视图时获取超出
AccessShareLock的锁(Dean Rasheed)这一疏忽导致 pg_dump 对规则中作为
INSERT/UPDATE/DELETE命令目标的表意外获取了RowExclusiveLock锁。虽然通常无害,但它可能干扰试图在这些表上获取例如ShareLock的并发事务。改进规划期间索引端点探测的性能(Tom Lane)
此变更修复了当索引末尾存在大量尚未提交的行时的显著性能问题,这对于基于顺序赋值(如时间戳或序列生成的标识符)的索引是常见情况。
当右侧是稳定表达式时,对
和valueIN (list)表达式使用非默认的选择率估计(Tom Lane)valueoperatorANY (array)在
DROP DATABASE期间删除正确的逐数据库统计文件(Tomas Vondra)此修复防止统计文件空间的永久泄漏。自升级到 PostgreSQL 9.3 以来执行过许多
DROP DATABASE命令的用户,可能希望检查其统计目录,并删除与任何现有数据库不对应的统计文件。请注意db_0.stat不应删除。修复 walsender 的 ping 逻辑,避免持续负载下不恰当的断开连接(Andres Freund、Heikki Linnakangas)
如果 walsender 一直忙于发送 WAL 数据,它就不会向客户端发送 ping 消息;但它仍然期待收到 ping 响应,因此一旦wal_sender_timeout超时就会断开连接。
修复客户端为 pg_receivexlog 时 walsender 无法干净关闭的问题(Fujii Masao)
在执行将被归档恢复跟随的崩溃恢复时,正确检查 WAL 级别和热备参数(Heikki Linnakangas)
修复崩溃后是否可以立即允许热备连接的测试(Heikki Linnakangas)
新增只读参数data_checksums,用于显示是否启用了页校验和(Heikki Linnakangas)
没有这个参数,很难确定校验和处理的状态。
在报告非
ERROR消息期间防止中断(Tom Lane)这可以防止因递归进入
syslog()而导致的罕见服务器进程冻结,或许还能防止其他相关问题。修复 PL/Perl 返回组合结果(包括多 OUT 参数情况)时的内存泄漏(Alex Hunsaker)
修复
\copy从带外数据读取期间 psql 脚本行号跟踪的问题(Kumar Rajeev Rastogi、Amit Khandekar)即使数据并非来自脚本文件,
\copy ... from也会为每个数据行递增脚本文件行号。这一失误导致同一脚本文件中稍后发生的任何错误报告了错误的行号。修复 contrib/postgres_fdw 以正确处理多个连接条件(Tom Lane)
这一疏忽可能导致把
WHERE子句发送到远程服务器执行,即使并不确定这些子句在远程服务器上具有相同的语义(例如使用非内建操作符的子句)。查询可能照样成功,但也可能因远程服务器报错而失败,更糟的是可能静默地给出错误答案。防止在较新的 Windows 版本上间歇性出现 “could not reserve shared memory region” 失败(MauMau)
把时区数据文件更新为 tzdata 版本 2014a,以反映斐济和土耳其的夏令时法规变更,以及以色列和乌克兰的历史变更。