选择 打开 改范围 完整检索页
不受支持的版本: 10
当前 PostgreSQL 版本不在支持生命周期内。
您可以参阅当前版本手册首页的对应页面,或其他在上面列出的活跃大版本。

E.17. 发布版本 10.7 #

发布日期:. 2019-02-14

本次发布包含来自 10.6 的多项修复。 有关 10 主版本新特性的说明,请参见 Section E.24.

E.17.1. 迁移到版本 10.7

对于运行 10.X 的用户,不需要执行导出/恢复。

但是,如果是从早于 10.6 的版本升级,请参见 Section E.18

E.17.2. 变更

  • 默认在 fsync() 失败后触发 panic,而不重试,以避免可能的数据损坏(Craig Ringer,Thomas Munro)

    某些常见操作系统在无法写出内核数据缓冲区时会丢弃它们,并将其报告为 fsync() 失败。如果重新发出 fsync() 请求,它会成功,但实际上数据已丢失,因此继续运行有数据库损坏的风险。改为触发 panic 后,我们可以从 WAL 重放;在这种情况下,WAL 可能包含数据仅存的副本。虽然这种做法显然不够理想且效率低下,但替代方案很少,所幸这种情况极少发生。

    为控制此行为,添加了新的服务器参数 data_sync_retry;如果确信内核不会在此类情况下丢弃脏数据缓冲区,可以将 data_sync_retry 设置为 on,恢复以前的行为。

  • 仅在各大版本分支的文档中包含该分支的发布说明,而非在该分支及所有后续分支中重复包含(Tom Lane)

    此前政策造成的重复内容已难以控制。我们计划在项目网站上提供完整的发布说明归档,但不在每个发行版中重复包含。

  • 确保分区表的 NOT NULL 约束在其分区中得到遵循(Álvaro Herrera,Amit Langote)

  • 分离分区时使用安全的表锁级别(Álvaro Herrera)

    以前的锁级别太弱,可能允许并发对表执行 DDL,产生不良后果。

  • 修复将 ON COMMIT DROPON COMMIT DELETE ROWS 应用于分区表以及具有继承子表的表时出现的问题(Michael Paquier)

  • 禁止对分区表执行 COPY FREEZE(David Rowley)

    最终应使这种用法能够工作,但所需补丁可能过于复杂,不适合冒险回补到旧版本。

  • 避免获取多个缓冲区锁时可能发生的死锁(Nishant Fnu)

  • 避免 GIN 清理与并发索引插入之间的死锁(Alexander Korotkov,Andrey Borodin,Peter Geoghegan)

    此更改部分撤回了版本 10.0 引入的一项性能改进,该改进曾尝试减少删除 GIN 倒排树页面时锁定的索引页数量。现在发现这会导致死锁,因此在进一步分析之前将其移除。

  • 避免热备查询与 GIN 索引页面删除重放之间的死锁(Alexander Korotkov)

  • 修复使用索引表达式或谓词时逻辑复制中可能发生的崩溃(Peter Eisentraut)

  • 避免在表重写期间对 TOAST 数据进行无用且代价高昂的逻辑解码(Tomas Vondra)

  • 修复启用同步复制时停止部分 WAL 发送进程的逻辑(Paul Guo,Michael Paquier)

  • 避免在元组删除 WAL 记录中写入不正确的复制标识字段(Stas Kelvich)

  • 防止向视图或外部表执行 COPY 时不正确地使用跳过 WAL 的优化(Amit Langote,Michael Paquier)

  • 让归档进程在选择下一个要归档的文件时,优先选择 WAL 历史文件,而非 WAL 数据文件(David Steele)

  • 修复 UPDATE 的多列 SET 子句使用子 SELECT 作为数据源时可能发生的崩溃(Tom Lane)

  • 避免 libxml2 返回空错误消息时发生崩溃(Sergio Conde Gómez)

  • 修复因排序规则分配处理不一致而引发的虚假分组相关解析器错误(Andrew Gierth)

    在某些情况下,如果表达式包含对支持排序规则的数据类型的操作,本应被视为匹配的表达式没有被认定为匹配。

  • 检查 LEAST()GREATEST() 底层的比较函数是否防泄漏,而非直接假定它防泄漏(Tom Lane)

    通常很难使 B-树比较函数实际泄漏信息,但原则上可能发生。

  • 修复 Gather 计划节点上下都包含嵌套循环的查询的不正确规划(Tom Lane)

    如果两层嵌套循环都需要将同一个变量传入各自的右侧,就会生成不正确的计划。

  • 修复必须在外部表扫描处对横向引用求值的查询的不正确规划(Tom Lane)

  • 修复边界情况下低估归并连接代价的问题(Tom Lane)

    当外侧键范围远小于内侧键范围时,规划器可能偏好归并连接,即使内侧存在大量重复键,使其成为低效选择。

  • 避免查询包含成千上万个可使用索引的子句时,规划时间以 O(N^2) 增长(Tom Lane)

  • 改进 ANALYZE 对并发更新行的处理(Jeff Janes,Tom Lane)

    以前,正在进行的事务所删除的行会被排除在 ANALYZE 样本之外,但现在发现,这比包含它们会带来更多不一致。实际上,样本现在对应于 ANALYZE 开始时的 MVCC 快照。

  • 使 TRUNCATE 忽略属于其他会话临时表的继承子表(Amit Langote,Michael Paquier)

    这使 TRUNCATE 的行为与其他命令一致。以前,此类情况通常会以失败告终。

  • 修复 TRUNCATE,使其更新正确表的统计计数器(Tom Lane)

    如果被截断的表具有 TOAST 表,以前会重置 TOAST 表的计数器。

  • 正确处理 ALTER TABLE ONLY ADD COLUMN IF NOT EXISTS(Greg Stark)

  • 允许在热备模式下执行 UNLISTEN(Shay Rojansky)

    这必然是无操作,因为热备模式不允许 LISTEN;但允许这一空操作可以简化客户端的会话状态重置逻辑。

  • 修复某些模式和数据类型权限列表中缺失的角色依赖关系(Tom Lane)

    在某些情况下,可以删除已被授予权限的角色。这不会立即引发问题,但随后的转储/重载或升级会失败,表现为尝试向名称完全由数字组成的角色授予权限。

  • 防止在两阶段事务中使用会话的临时模式(Michael Paquier)

    很早以前就已禁止在此类事务中访问临时表,但对临时对象的其他操作仍可能引发问题。

  • 确保添加或移除外键约束后正确更新关系缓存(Álvaro Herrera)

    这一疏漏可能导致现有会话未实施新建约束,或继续实施已删除的约束。

  • 确保重命名约束后正确更新关系缓存(Amit Langote)

  • 使自动清理更积极地移除残留临时表,并在 DISCARD TEMP 期间也移除残留临时表(Álvaro Herrera)

    这有助于确保更及时地清理崩溃会话的残留对象。

  • 修复 GiST 索引微清理操作的重放,使并发热备查询不会看到不一致状态(Alexander Korotkov)

  • 防止过快回收空 GIN 索引页而导致并发搜索失败(Andrey Borodin,Alexander Korotkov)

  • 修复浮点数到整数强制转换在边界情况下的失败(Andrew Gierth,Tom Lane)

    略高于最大有效整数值的值可能未被拒绝,随后发生溢出,反而产生最小有效整数。此外,本应舍入为最小或最大整数值的值可能被错误拒绝。

  • 发起 PAM 认证请求时,如果连接通过 Unix 套接字建立,则不设置 PAM_RHOST 变量(Thomas Munro)

    以前,该变量会被设置为 [local],但它本应是主机名,因此这样的值至少没有什么帮助。

  • 禁止将 client_min_messages 设置为高于 ERROR 的级别(Jonah Harris,Tom Lane)

    以前,可以将此变量设置为 FATALPANIC,从而禁止向客户端传送普通错误消息。但这违背了 PostgreSQL 通信协议规范中的保证,并导致某些客户端行为严重异常。在已发布分支中,修复方法是静默地将此类设置视为 ERROR。版本 12 及后续版本将完全拒绝这些选项。

  • 修复 ecpglib,使其优先使用 uselocale()_configthreadlocale(),而非 setlocale()(Michael Meskes,Tom Lane)

    由于 setlocale() 不局限于线程,甚至可能不是线程安全的,以前的代码会给多线程 ecpg 应用带来问题。

  • 修复通过 ecpg SQLDA(SQL 描述符区域)传递的数值数据结果不正确的问题(Daisuke Higuchi)

    带有前导零的值未被正确复制。

  • 修复 psql\g target 元命令,使其适用于 COPY TO STDOUT(Daniel Vérité)

    以前,target 选项被忽略,因此复制的数据始终发送到当前查询输出目标。

  • 使 psql 的 LaTeX 输出格式正确呈现特殊字符(Tom Lane)

    反斜线和某些其他 ASCII 标点字符未被正确呈现,导致文档语法错误或输出中出现错误字符。

  • 修复 pg_dump 对间接依赖主键的物化视图的处理(Tom Lane)

    这曾导致此类视图的转储归档条目被错误标记,产生无害的 archive items not in correct section order 警告;更有影响的是,依赖这些标记的选择性恢复选项(如 --section)可能出现错误行为。

  • 避免 pg_dumppg_restore 尝试报告错误时,在某些平台上因空指针解引用而崩溃(Tom Lane)

  • 如果 COPY FROM PROGRAM 提前停止读取程序输出,则适当地忽略 SIGPIPE 错误(Tom Lane)

    实际上,直接使用 COPY 不会出现这种情况,但使用 contrib/file_fdw 时可能发生。

  • 修复 contrib/hstore,使其为版本 8.4 或更早版本创建的空 hstore 值计算正确的哈希值(Andrew Gierth)

    以前的代码产生的结果,与较新版本创建的空 hstore 值不同,因此可能导致哈希连接或哈希聚合结果不正确。如果表中可能包含最早在 8.4 时存储、此后从未经过转储/重新加载的数据,建议重建 hstore 列上的所有哈希索引。

  • 避免向 contrib/intarraygist__int_ops 索引支持代码提供大量输入时发生崩溃或运行时间过长(Andrew Gierth)

  • configure 中,如果找不到 python,则依次查找 python3python2(Peter Eisentraut)

    这使不再提供无版本号的 python 可执行文件的平台,无需显式指定 PYTHON 即可配置 PL/Python。

  • pgxs 构建中支持新的 Makefile 变量 PG_CFLAGSPG_CXXFLAGSPG_LDFLAGS(Christoph Berg)

    这简化了扩展构建过程的自定义。

  • 修复以 Perl 编写的构建脚本,使其不再假定搜索路径包含 .,因为近期 Perl 版本已不再包含它(Andrew Dunstan)

  • 修复 OpenBSD 上服务器命令行选项的解析问题(Tom Lane)

  • 调整 set_rel_pathlist_hook 调用的位置,使扩展可以用它为并行查询提供部分路径(KaiGai Kohei)

    预计这不会影响现有使用场景。

  • 重命名红黑树支持函数,使用 rbt 前缀代替 rb 前缀(Tom Lane)

    这避免了与 Ruby 函数发生名称冲突,后者曾使 PL/Ruby 失效。希望没有其他扩展受到影响。

  • 将时区数据文件更新到 tzdata 2018i 版,以反映哈萨克斯坦、梅特拉卡特拉及圣多美和普林西比的夏令时法规变更。由于部分地区未更改 UTC 偏移量,哈萨克斯坦的 Qyzylorda 时区被一分为二,创建了新时区 Asia/Qostanay。同时修正了香港及众多太平洋岛屿的历史数据。