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

E.19. 发布版本 10.5 #

发布日期:. 2018-08-09

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

E.19.1. 迁移到版本 10.5

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

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

E.19.2. 变更

  • 修复连接尝试之间未能完全重置 libpq 状态的问题(Tom Lane)

    dblinkpostgres_fdw 的无特权用户可以绕过用于防止使用服务器端凭据的检查,例如使用运行服务器的操作系统用户所拥有的 ~/.pgpass 文件。允许在本地连接上使用 peer 认证的服务器尤其容易受到影响。其他攻击也有可能发生,例如向 postgres_fdw 会话注入 SQL。以这种方式攻击 postgres_fdw 需要能够创建带有特定连接参数的外部服务器对象,但任何能够访问 dblink 的用户都可以利用此问题。一般来说,能够为使用 libpq 的应用选择连接参数的攻击者就可能造成危害,不过其他可能的攻击场景比较难以想到。感谢 Andrew Krasichkov 报告此问题。(CVE-2018-10915)

  • 修复通过并非简单 SELECT * FROM ... 的视图执行 INSERT ... ON CONFLICT UPDATE 的问题(Dean Rasheed,Amit Langote)

    如果可更新视图的 SELECT 列表与底层表的列不一一对应,对该视图的错误展开可能导致崩溃或 attribute ... has the wrong type 错误。此外,如果攻击用户具有该表某些其他列的 INSERTUPDATE 权限,就可以利用此缺陷更新其没有 UPDATE 权限的列。任何用户也都可以利用此缺陷泄露服务器内存。(CVE-2018-10925)

  • 确保及时处理对固定系统目录的 relfrozenxidrelminmxid 值的更新(Andres Freund)

    过于乐观的缓存规则可能使其他会话无法看到这些更新,从而导致虚假的错误或数据损坏。对于 pg_authid 等共享目录,问题严重得多,因为过期的缓存数据不仅会影响现有会话,还可能延续到新会话中。

  • 修复刚提升的备库在完成恢复后的第一个检查点之前崩溃的情况(Michael Paquier,Kyotaro Horiguchi,Pavan Deolasee,Álvaro Herrera)

    这曾导致服务器在后续 WAL 重放期间认为自己尚未达到数据库一致状态,无法重新启动。

  • 避免回收全零 B-树页面时生成错误的 WAL 记录(Amit Kapila)

    已观察到此错误会导致断言失败,也可能使热备服务器上的查询被不必要地取消。

  • WAL 重放期间,防范损坏记录的长度超过 1GB 的情况(Michael Paquier)

    将此类情况视为数据损坏。以前,代码会尝试分配空间并出现无法继续的错误,使恢复无法进行。

  • 结束恢复时,尽可能推迟写入时间线历史文件(Heikki Linnakangas)

    这避免了某些恢复清理期间的失败(例如两阶段状态文件问题)导致磁盘上的时间线状态不一致的情况。

  • 提高删除大量关系的事务的 WAL 重放性能(Fujii Masao)

    此更改减少了扫描共享缓冲区的次数,因此在共享缓冲区设置较大时收益最大。

  • 提高备库 WAL 重放中释放锁的性能(Thomas Munro)

  • 使逻辑 WAL 发送进程正确报告流式传输状态(Simon Riggs,Sawada Masahiko)

    以前,代码会错误判断是否已追上上游服务器。

  • 确保逻辑复制订阅者执行数据类型输入函数时提供快照(Minh-Quan Tran,Álvaro Herrera)

    这一遗漏会在某些情况下导致失败,例如域约束使用 SQL 语言函数时。

  • 修复逻辑解码期间快照处理中的缺陷,这些缺陷在罕见情况下会导致错误的解码结果(Arseny Sher,Álvaro Herrera)

  • 为逻辑复制表同步工作进程添加子事务处理(Amit Khandekar,Robert Haas)

    以前,如果子事务修改了正在同步的表后中止,表同步就可能出现错误行为。

  • 确保索引创建中途失败后,正确重建表的缓存索引列表(Peter Geoghegan)

    以前,失败索引的 OID 可能仍留在列表中,导致同一会话中后续出现问题。

  • 修复 GIN 索引中对空的未压缩倒排列表页面的不正确处理(Sivasubramanian Ramasubramanian,Alexander Korotkov)

    这可能在通过 pg_upgrade 升级 9.4 之前的 GIN 索引后导致断言失败(9.4 及后续版本不会创建此类页面)。

  • 填充未命名 POSIX 信号量数组,以减少缓存行共享(Thomas Munro)

    这减少了多 CPU 系统上的争用,修复了 Linux 和 FreeBSD 上相对于以前版本的性能回归。

  • 确保执行并行索引扫描的进程响应信号(Amit Kapila)

    以前,并行工作进程可能卡在等待索引页锁的状态,无法注意到中止查询的请求。

  • 确保 VACUUM 在 B-树页面删除循环中响应信号(Andres Freund)

    损坏的 B-树索引可能在这里导致无限循环,以前只能通过强制崩溃才能中断。

  • 修复 inner_unique 优化引入的哈希连接代价估算错误(David Rowley)

    这可能在适用该优化的情况下导致选择低效计划。

  • 修复涉及复合类型列的等价类的不正确优化(Tom Lane)

    这曾导致无法识别复合列上的索引能够提供该列归并连接所需的排序顺序。

  • 修复规划器,避免某些包含返回集合函数的查询发生 ORDER/GROUP BY expression not found in targetlist 错误(Tom Lane)

  • 修复对数组等数据类型使用多态 B-树操作符类的分区键的处理(Amit Langote,Álvaro Herrera)

  • 修复 SQL 标准的 FETCH FIRST 语法,使其按照标准预期允许参数($n)(Andrew Gierth)

  • 移除未文档化的禁止重复分区键列的限制(Yugo Nagata)

  • 禁止临时表成为非临时表的分区(Amit Langote,Michael Paquier)

    虽然以前允许这种情况,但其运行并不可靠。

  • 修复 EXPLAIN 对并行工作进程资源用量的统计,尤其是缓冲区访问(Amit Kapila,Robert Haas)

  • 修复 SHOW ALL,使其向 pg_read_all_settings 的成员角色显示所有设置,并允许这些角色在 pg_settings 视图中看到源文件名和行号(Laurenz Albe,Álvaro Herrera)

  • 修复 getObjectDescriptiongetObjectIdentity 输出中某些对象名未加模式限定的问题(Kyotaro Horiguchi,Tom Lane)

    排序规则、转换、文本搜索对象、发布关系和扩展统计对象的名称,未在应当使用模式限定时加上限定。

  • 修复 CREATE AGGREGATE 的类型检查,使并行支持函数能够附加到可变参数聚合(Alexey Bashtanov)

  • COPY FROM 的当前行号计数器从 32 位扩为 64 位(David Rowley)

    这避免了输入超过 4G 行时的两个问题:COPY FROM WITH HEADER 会每隔 4G 行丢弃一行,而不只是第一行;错误报告也可能显示不正确的行号。

  • 允许在单用户模式下删除复制槽(Álvaro Herrera)

    这种用法在 10.0 版中被意外破坏。

  • 修复 variance(int4) 及相关聚合在并行聚合模式下运行时结果不正确的问题(David Rowley)

  • 正确处理 xmltable() 列表达式中的 TEXTCDATA 节点(Markus Winand)

  • 处理 OpenSSLRAND_bytes() 函数可能发生的失败(Dean Rasheed,Michael Paquier)

    在罕见情况下,这一疏漏可能导致只能通过重启 postmaster 解决的 could not generate random cancel key 失败。

  • 修复 libpq 对某些指定了 hostaddr 的情况的处理(Hari Babu,Tom Lane,Robert Haas)

    PQhost() 在某些情况下会给出误导性或不正确的结果。现在,它统一遵循以下规则:如果指定了主机名,则返回主机名;如果仅指定主机地址,则返回主机地址;如果两个参数都省略,则返回默认主机名(通常为 /tmplocalhost)。

    此外,验证 SSL 证书时,可能使用错误的值与服务器名比较。

    此外,可能使用错误的值与 ~/.pgpass 中的主机名字段比较。现在,如果指定了主机名,则用主机名比较;如果仅指定主机地址,则用主机地址比较;如果两个参数都省略,则用 localhost 比较。

    此外,对于无法解析的 hostaddr 值,以前会报告不正确的错误消息。

    此外,当 hosthostaddrport 参数包含逗号分隔的列表时,libpq 现在会更谨慎地将列表中的空元素视为选择默认行为。

  • ecpgpgtypes 库添加字符串释放函数,以避免 Windows 上跨模块内存管理的问题(Takayuki Tsunakawa)

    在 Windows 上,如果对某块内存调用 free 的 DLL 与调用 malloc 分配它的 DLL 不同,就可能崩溃。pgtypes 库有时返回预期由调用者释放的字符串,使这条规则无法遵循。现在添加简单包装 freePGTYPESchar_free() 函数,使应用能够遵循这条规则。

  • 修复 ecpg 在 Windows 以及其他对 strtoll/strtoull 使用非标准声明或完全不声明的平台上对 long long 变量的支持(Dang Minh Huong,Tom Lane)

  • 修复规则变更导致会话内语句语义变化时,PL/pgSQL 对 SQL 语句类型的错误识别(Tom Lane)

    此错误会导致断言失败,或在罕见情况下未按预期实施 INTO STRICT 选项。

  • 修复客户端程序的密码提示,使 Windows 上的 stdin 不是终端时也能正确禁用回显(Matthew Stickney)

  • 进一步修复转储中列表值 GUC 变量的值的引号处理错误(Tom Lane)

    此前针对 pg_dump 输出中 search_path 和其他列表值变量引号处理的修复,在列表元素为空字符串时表现不正确,还存在截断长文件路径的风险。

  • 修复 pg_dump 未能转储约束索引的 REPLICA IDENTITY 属性的问题(Tom Lane)

    手动创建的唯一索引得到了正确标记,但通过声明 UNIQUEPRIMARY KEY 约束创建的索引没有。

  • 使 pg_upgrade 检查旧服务器是否正常关闭(Bruce Momjian)

    以前的检查可能被 immediate 模式关闭所蒙蔽。

  • 修复 contrib/hstore_plperl,使其解引用 Perl 标量引用,并在预期哈希引用却未找到时不再崩溃(Tom Lane)

  • 修复输入数组为空时 contrib/ltreelca() 函数发生的崩溃(Pierre Ducroquet)

  • 修复可能报告不正确错误码的各种错误处理代码路径(Michael Paquier,Tom Lane,Magnus Hagander)

  • 重新安排 makefile,确保程序链接到刚构建的库(如 libpq.so),而非可能存在于系统库目录中的库(Tom Lane)

    这避免了在提供旧版 PostgreSQL 库的平台上构建时出现问题。

  • 将时区数据文件更新到 tzdata 2018e 版,以反映朝鲜的夏令时法规变更,并修正捷克斯洛伐克的历史数据。

    此更新重新定义了爱尔兰以及纳米比亚和捷克斯洛伐克部分历史年份中的夏令时。这些地区在法律上于夏季采用标准时间,冬季采用夏令时,因此夏令时偏移量比标准时间慢一小时,而非快一小时。这既不影响实际 UTC 偏移量,也不影响使用的时区缩写;唯一已知的影响是,在这些情况下,pg_timezone_names 视图中的 is_dst 列现在会在冬季为真、夏季为假。