E.9. 10.5 版

发布日期: 2018-08-09

此版本包含自 10.4 起的各种修复程序。有关主要版本 10 中新功能的信息,请参阅Section E.14

E.9.1. 迁移到版本 10.5

运行 10.X 的用户不需要转储/还原。

但是,如果要从 10.4 之前的版本升级,请参见Section E.10

E.9.2. Changes

dblinkpostgres_fdw的非特权用户可以绕过旨在防止使用服务器端凭据的检查,例如,运行服务器的 os 用户拥有的~/.pgpass文件。允许在本地连接上进行对等身份验证的服务器特别容易受到攻击。其他攻击,例如将 SQL 注入postgres_fdw会话,也是可能的。以这种方式攻击postgres_fdw需要具有使用选定的连接参数创建外部服务器对象的能力,但是有权使用dblink的任何用户都可以利用此问题。通常,尽管很难想象其他合理的攻击情形,但能够为使用 libpq 的应用程序选择连接参数的攻击者可能会恶作剧。感谢 Andrew Krasichkov 报告此问题。 (CVE-2018-10915)

如果视图的SELECT列表与基础表的列不一对一匹配,则可更新视图的错误扩展可能会导致崩溃或“属性...类型错误”错误。此外,如果该用户对表的某些其他列具有INSERTUPDATE特权,则可以利用此错误来允许攻击用户缺少UPDATE特权的列的更新。任何用户都可以使用它来泄露服务器内存。 (CVE-2018-10925)

过度优化的缓存规则可能会阻止其他会话看到这些更新,从而导致虚假错误和/或数据损坏。对于共享目录(例如pg_authid),问题变得更加严重,因为陈旧的缓存数据可能会同时存在于新会话和现有会话中。

这导致服务器在随后的 WAL 重播过程中认为服务器没有达到一致的数据库状态,从而导致无法重启。

已经发现此错误会导致 assert 失败,并有可能导致热备用服务器上不必要的查询取消。

将这种情况视为损坏的数据。以前,代码将尝试分配空间并获得硬错误,从而使恢复变得不可能。

这样可以避免在恢复清理过程中出现故障(例如,两阶段状态文件出现问题)导致磁盘上的时间轴状态不一致的情况。

此更改减少了扫描共享缓冲区的次数,因此,当该设置较大时,它是最有用的。

该代码以前会错误地检测它是否已赶上上游服务器。

这种遗漏在某些情况下会导致失败,例如使用 SQL 语言功能受约束的域。

以前,如果修改了要同步的表之后中止了任何子事务,则表同步可能会发生异常。

以前,失败索引的 OID 可能会保留在列表中,稍后在同一会话中会引起问题。

在 pg_upgrade 之前的 GIN 9.4 之前的索引可能会导致 assert 失败(9.4 及更高版本将不会创建此类页面)。

这样可以减少许多 CPU 系统上的争用,从而修复了 Linux 和 FreeBSD 上的性能下降(与以前的版本相比)。

以前,并行工作程序可能在 await 索引页上的锁定时陷入困境,而不会注意到中止查询的请求。

损坏的 btree 索引可能会在此处导致无限循环,并且以前如果不强制崩溃就无法中断。

在这种优化适用的情况下,这可能会导致错误的计划选择。

这导致无法识别复合列上的索引可以提供该列上的 mergejoin 所需的排序 Sequences。

尽管以前允许,但这种情况无法可靠地进行。

归类,转换,文本搜索对象,发布关系和扩展统计对象的名称在应为架构名称时均不受模式限制。

这样可以避免 Importing 超过 4G 行的两个问题:COPY FROM WITH HEADER将每 4G 行(而不只是第一行)丢弃一条行,并且错误报告可能显示错误的行号。

该用例在版本 10.0 中意外中断。

在极少数情况下,这种疏忽可能导致“无法生成随机取消键”失败,而这种失败只能通过重新启动邮局主管来解决。

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

另外,在验证 SSL 证书时,可能会将错误的值与服务器名称进行比较。

另外,可能会将错误的值与~/.pgpass中的主机名字段进行比较。现在,如果指定了主机名,则将该字段与主机名进行比较;如果仅指定主机名,则将其与主机地址进行比较;如果省略两个参数,则将其与localhost进行比较。

此外,报告了错误的错误消息,表示无法解析的hostaddr值。

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

在 Windows 上,如果对给定内存块的free调用不是由对内存进行malloc的同一 DLL 进行的,则可能导致崩溃。 pgtypes库有时会返回它希望调用者释放的字符串,从而使它无法遵循此规则。添加仅包装freePGTYPESchar_free()函数,使应用程序可以遵循此规则。

此错误导致 assert 失败,或者在极少数情况下,无法按预期实施INTO STRICT选项。

先前对 pg_dump 输出中的search_path和其他列表值变量加引号的修复原来对于空字符串列表元素而言是不当行为,并且存在长文件路径被截断的风险。

正确标记了手动创建的唯一索引,但没有标记pass 语句UNIQUEPRIMARY KEY约束创建的索引。

先前的检查可能被立即模式关闭所欺骗。

这样可以避免在提供 PostgreSQL 库旧副本的平台上构建时出现问题。

此更新包括在爱尔兰以及过去几年在纳米比亚和捷克斯洛伐克重新定义的“夏令时”。在这些司法管辖区中,法律规定的夏令时为夏季,冬季为夏令时,因此夏令时偏移比标准时间晚一小时,而不是提前一小时。这不会影响实际的 UTC 偏移量或使用的时区缩写。唯一已知的效果是,在这种情况下,pg_timezone_names视图中的is_dst列现在在冬季为 true,在夏季为 false。

上一章 首页 下一章