E.30. 版本 9.4.6

E.30.1. 迁移到版本9.4.6
E.30.2. 修改列表

发布日期:. 2016-02-11

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

E.30.1. 迁移到版本9.4.6

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

但是,如果要升级包含使用(非默认)jsonb_path_ops 运算符类的任何GIN索引的安装,请参阅下面的第一个更改日志条目。

还有,如果您是从一个早于9.4.4的版本升级而来,请查看第 E.32 节

E.30.2. 修改列表

  • 修复jsonb_path_ops GIN索引中不一致的哈希计算 (Tom Lane)

    当处理包含相同嵌套级别的标量和子对象的jsonb值时,例如包含标量和子数组的数组, 秘钥哈希值的计算方式可能不同于在不同上下文中相同键值的计算。 这可能导致查询未找到他们应该找到的条目。 修复这意味着现有索引现在可能与新的哈希计算代码不一致。在安装此更新后, 用户应该在安装此更新后REINDEX jsonb_path_ops GIN索引, 以确保所有搜索按预期工作。

  • 修复正则表达式中无限循环和缓冲区溢出问题 (Tom Lane)

    在某些情况下,括号表达式中非常大的字符范围可能会导致无限循环, 并且在其他情况下内存会覆盖。 (CVE-2016-0773)

  • 如果删除了postmaster.pid文件,执行立即关闭 (Tom Lane)

    postmaster现在每一分钟都检查,查看postmaster.pid仍然存在, 仍然包含它自己的PID。如果没有,它会立即关闭,就像收到了SIGQUIT一样。 这种变化的主要动机是确保在没有手动干预的情况下,失败的构建运行得到清理; 但是如果DBA强制删除postmaster.pid,然后启动一个新的postmaster, 它也可以限制不良影响。

  • SERIALIZABLE事务隔离模式下, 串行化异常可能由于插入过程中的竞争条件而丢失 (Kevin Grittner, Thomas Munro)

  • 修复在为未记录的关系执行ALTER TABLE ... SET TABLESPACE时, 未能发出合适的WAL记录 (Michael Paquier, Andres Freund)

    即使关系的数据未被记录,移动必须被记录否则在备用被提升为主服务器之后关系将无法访问。

  • 修复在崩溃恢复结束时可能的未记录关系的错误初始化 (Andres Freund, Michael Paquier)

  • 确保在重新使用时完全重新初始化Walsender插槽 (Magnus Hagander)

  • 修复ALTER COLUMN TYPE以正确重构造继承的检查约束 (Tom Lane)

  • 修复REASSIGN OWNED以正确改变复合类型的所有者 (Álvaro Herrera)

  • 在更改数据类型、外部数据封装器或外部服务器的所有者时, 修复REASSIGN OWNEDALTER OWNER 来正确更新授权权限列表 (Bruce Momjian, Álvaro Herrera)

  • 修复REASSIGN OWNED,忽略外部用户映射而不是失败 (Álvaro Herrera)

  • 修复为可更新视图执行查询重写后可能的崩溃 (Stephen Frost)

  • 修复规划器对LATERAL引用的处理 (Tom Lane)

    这修复了一些导致failed to build any N-way joinscould not devise a query plan规划器失败的极端情况。

  • 当索引的内部统计数据非常过时时,为GIN索引扫描的错误规划成本估算增加更多的防御 (Tom Lane)

  • 使规划器处理索引建议插件建议的假设GIN索引 (Julien Rouhaud)

  • 加快在EXPLAIN和规则转储中唯一表别名的生成, 并确保生成的别名不超过NAMEDATALEN (Tom Lane)

  • 修复ROW()VALUES()列表中整行变量的转储 (Tom Lane)

  • 负无穷日期和时间戳到jsonjsonb的转换不正确的呈现为正无穷 (Tom Lane)

  • 修复numeric除法中可能的内部溢出 (Dean Rasheed)

  • 修正正则表达式前瞻性约束内的括号内的强制限制 (Tom Lane)

    前瞻性约束不允许包含后向引用,根据手册,它们中的括号总是被认为是非捕获。 但是,代码无法在括号内的子表达式中正确处理这些情况,并会产生意想不到的结果。

  • 将正则表达式转换为索引扫描边界可能会产生包含前瞻约束的正则表达式的不正确边界 (Tom Lane)

  • 修正正则表达式编译器来处理约束弧的循环 (Tom Lane)

    为CVE-2007-4772添加的代码是不完整的,因为它不处理涉及多个状态的循环, 并且不正确,因为它可能导致断言失败(尽管在非断言构建中似乎没有不良后果)。 多状态循环将导致编译器运行,直到查询被取消或达到太多状态的错误状态。

  • 改进正则表达式编译器中的内存使用量计算 (Tom Lane)

    这导致代码在某些以前使用了不合理的时间和内存的情况下发出 regular expression is too complex的错误。

  • 提高正则表达式编译器的性能 (Tom Lane)

  • log_line_prefix中的%h%r转义可用于log_connections 发出的消息 (Tom Lane)

    以前,%h/%r仅在新会话发出connection received 日志消息后开始工作;现在它们也用于该消息。

  • 在Windows上,确保共享内存映射句柄在不需要它的子进程中关闭 (Tom Lane, Amit Kapila)

    这个疏忽导致logging_collector打开时, 无法从崩溃中恢复。

  • 修复Windows上在非阻塞模式下检测套接字EOF的可能失败 (Tom Lane)

    还不完全清楚这个问题是否会在9.5之前的分支中发生,但如果发生, 那么症状就是一个walsender进程会无限期地等待,而不是注意到连接丢失。

  • 避免在SSPI认证期间泄露令牌句柄 (Christian Ullrich)

  • psql中,确保当终端窗口大小更改时, libreadline的屏幕大小也更新 (Merlin Moncure)

    以前,libreadline没有注意到在查询输出期间是否调整了窗口的大小, 导致在以后输入多行查询时出现了奇怪的行为。

  • 修复psql\det命令, 与其他\d命令潜在模式限定模式相同的方式解释其模式参数 (Reece Hart)

  • 当前一次连接是通过Unix套接字和命令指定新的主机名和相同用户名时, 避免psql\c命令中可能的崩溃 (Tom Lane)

  • pg_ctl start -w中,直接测试子进程状态,而不是依赖于启发 (Tom Lane, Michael Paquier)

    以前,pg_ctl依赖于一个假设, 即新的postmaster将始终在五秒钟内创建postmaster.pid。但是, 在重负载系统上可能会失败,导致pg_ctl 不正确地报告postmaster无法启动。

    除了在Windows上,这种改变也意味着在另一个这样的命令之后立即执行的一个 pg_ctl start -w将可靠地失败, 而之前如果它在第一个命令的两秒内完成会报告成功。

  • pg_ctl start -w中,不要尝试使用通配符监听地址连接到postmaster (Kondo Yuta)

    在Windows上,如果listen_addresses设置为0.0.0.0 或者::,则pg_ctl将无法检测到postmaster启动, 因为它将尝试逐字使用该值作为要连接到的地址。正确的做法是分别假设使用 127.0.0.1::1

  • 在Windows上的pg_ctl中,检查服务器状态以决定输出发送到哪里, 而不是检查标准输出是否是终端 (Michael Paquier)

  • pg_dumppg_basebackup中, 采用GNU约定来处理超过8GB的tar档案成员 (Tom Lane)

    tar文件格式的POSIX标准不允许归档超过8GB的成员文件, 但是大多数现代化的tar实现支持一个扩展,修复了此问题。 采取这个扩展,以便在具有超过8GB数据的表上使用-Ftpg_dump不再失败,因此pg_basebackup 可以处理大于8GB的文件。此外,修复了一些可能导致在某些平台上4GB到8GB 之间的成员失败出现故障的可移植性问题。 潜在的这些问题可能会由于不可读的备份文件而导致无法恢复的数据丢失。

  • 修复pg_dump处理扩展成员对象中的各种极端错误 (Tom Lane)

  • pg_dump标记一个视图的触发器需要在其规则之后处理, 以阻止并行pg_restore期间可能的失败 (Tom Lane)

  • 确保关系选项值在pg_dump中正确的引用了 (Kouhei Sutou, Tom Lane)

    由于pg_dump发出的CREATE语句中的语法错误, 不是简单的标识符或数字的关系选项值可能导致转储/重新加载失败。 核心PostgreSQL目前支持的任何关系选项都不是问题, 但扩展可能会允许导致问题的关系选项。

  • 在并发pg_dump期间,避免重复的口令提示 (Zeus Kronion)

  • 修复pg_upgrade的文件拷贝代码,以在Windows上正确的处理错误 (Bruce Momjian)

  • 在评估脚本指定的除法或模运算符期间,在pgbench 中安装保护防止极端溢出条件 (Fabien Coelho, Michael Paquier)

  • 修复未能本地化pg_receivexlogpg_recvlogical 发出的消息 (Ioseph Kim)

  • 在使用plpython2plpython3 时,避免转储/重载问题 (Tom Lane)

    原则上,两个版本的PL/Python可以在同一个数据库中使用, 虽然不在同一个会话中(因为libpython的两个版本不能安全地同时使用)。 然而,pg_restorepg_upgrade 两者做的事情会使同一个会话限制冲突。通过改变检查的时间来解决。

  • 修复PL/Python回归测试以通过Python 3.5 (Peter Eisentraut)

  • 修复当插槽EOF时,libpq输入缓冲区过早的清除 (Tom Lane)

    在报告服务器意外关闭连接之前,此错误导致libpq 有时不报告后端的最终错误消息。

  • 阻止某些PL/Java参数被非超级用户设置 (Noah Misch)

    此更改缓解PL/Java安全性错误(CVE-2016-0766), 该错误在PL/Java中已通过将这些参数标记为仅限超级用户修复。 为了修复PostgreSQLPL/Java 更频繁更新的站点安全隐患,让核心代码也知道它们。

  • 改进libpq对内存不足情况的处理 (Michael Paquier, Amit Kapila, Heikki Linnakangas)

  • 修复ecpg产生的typedef语句中参数的顺序 (Michael Meskes)

  • ecpgPGTYPESnumeric_from_double() 中使用%g而不是%f格式 (Tom Lane)

  • 修复ecpg提供的头文件不包含从预处理器指令行继续到下一行的注释 (Michael Meskes)

    这样的注释被ecpg拒绝。目前还不清楚是否应该更改 ecpg本身。

  • 修复hstore_to_json_loose(), 测试hstore值是否可以转换为JSON数字 (Tom Lane)

    以前,此函数可能被非字母数字的尾随字符欺骗,导致发出句法上无效的JSON。

  • 确保contrib/pgcryptocrypt() 函数可以通过查询取消中断 (Andreas Karlsson)

  • contrib/postgres_fdw中,修复在数据修改命令中使用 tableoid触发的错误 (Etsuro Fujita, Robert Haas)

  • 接受flex 2.5.x 之后的版本 (Tom Lane, Michael Paquier)

    现在,flex 2.6.0已经发布,我们的构建脚本中的版本检查需要调整。

  • 通过确保文件名以固定顺序给链接器提高构建输出的重现性 (Christoph Berg)

    这避免了从一个构建到下一个构建生成的可执行文件的可能的逐位差异。

  • 在PGXS构建可以找到缺少脚本的地方安装它 (Jim Nasby)

    这允许在缺少构建工具(例如bison) 的机器上完成PGXS构建中的正常行为。

  • 确保dynloader.h包含在MSVC构建中安装的头文件中 (Bruce Momjian, Michael Paquier)

  • 添加变体回归测试预期的输出文件以匹配当前libxml2行为 (Tom Lane)

    libxml2的CVE-2015-7499 的修复导致它在某些应该报告错误内容的情况下不输出错误内容。 这似乎是一个错误,但是我们可能要忍受一段时间,所以绕开它。

  • 更新时区数据文件到tzdata版本2016a, 因为DST规律在开曼群岛、Metlakatla和Trans-Baikal Territory (Zabaykalsky Krai) 发生了改变,加上巴基斯坦的历史修正。