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
- 修复无法在连接尝试之间完全重置 libpq 的状态的问题(Tom Lane)
dblink
或postgres_fdw
的非特权用户可以绕过旨在防止使用服务器端凭据的检查,例如,运行服务器的 os 用户拥有的~/.pgpass
文件。允许在本地连接上进行对等身份验证的服务器特别容易受到攻击。其他攻击,例如将 SQL 注入postgres_fdw
会话,也是可能的。以这种方式攻击postgres_fdw
需要具有使用选定的连接参数创建外部服务器对象的能力,但是有权使用dblink
的任何用户都可以利用此问题。通常,尽管很难想象其他合理的攻击情形,但能够为使用 libpq 的应用程序选择连接参数的攻击者可能会恶作剧。感谢 Andrew Krasichkov 报告此问题。 (CVE-2018-10915)
- 通过不只是
SELECT * FROM ...
的视图修复INSERT ... ON CONFLICT UPDATE
(Dean Rasheed,Amit Langote)
如果视图的SELECT
列表与基础表的列不一对一匹配,则可更新视图的错误扩展可能会导致崩溃或“属性...类型错误”错误。此外,如果该用户对表的某些其他列具有INSERT
和UPDATE
特权,则可以利用此错误来允许攻击用户缺少UPDATE
特权的列的更新。任何用户都可以使用它来泄露服务器内存。 (CVE-2018-10925)
- 确保及时处理“已钉”系统目录的
relfrozenxid
和relminmxid
值的更新(Andres Freund)
过度优化的缓存规则可能会阻止其他会话看到这些更新,从而导致虚假错误和/或数据损坏。对于共享目录(例如pg_authid
),问题变得更加严重,因为陈旧的缓存数据可能会同时存在于新会话和现有会话中。
- 修复新升级的备用数据库在完成其第一个恢复后检查点之前崩溃的情况(Michael Paquier,Kyotaro Horiguchi,Pavan Deolasee,ÁlvaroHerrera)
这导致服务器在随后的 WAL 重播过程中认为服务器没有达到一致的数据库状态,从而导致无法重启。
- 回收全零 btree 页面时避免发出虚 PseudoWAL 记录(Amit Kapila)
已经发现此错误会导致 assert 失败,并有可能导致热备用服务器上不必要的查询取消。
- 在 WAL 重放期间,请防止损坏的记录长度超过 1GB(Michael Paquier)
将这种情况视为损坏的数据。以前,代码将尝试分配空间并获得硬错误,从而使恢复变得不可能。
- 结束恢复时,请尽可能延迟写入时间线历史记录文件(Heikki Linnakangas)
这样可以避免在恢复清理过程中出现故障(例如,两阶段状态文件出现问题)导致磁盘上的时间轴状态不一致的情况。
- 对于掉落很多关系的 Transaction 提高 WAL 重播的性能(Fujii Masao)
此更改减少了扫描共享缓冲区的次数,因此,当该设置较大时,它是最有用的。
-
在备用服务器 WAL 重放中提高锁释放的性能(Thomas Munro)
-
使逻辑 WAL 发送者正确报告流状态(Simon Riggs,Sawada Masahiko)
该代码以前会错误地检测它是否已赶上上游服务器。
- 在逻辑复制用户中执行数据类型 Importing 功能时,请确保提供快照(Minh-Quan Tran,ÁlvaroHerrera)
这种遗漏在某些情况下会导致失败,例如使用 SQL 语言功能受约束的域。
-
修复逻辑解码过程中快照处理中的错误,在极少数情况下允许错误的解码结果(Arseny Sher,ÁlvaroHerrera)
-
在逻辑复制表同步工作器中添加子事务处理(Amit Khandekar,Robert Haas)
以前,如果修改了要同步的表之后中止了任何子事务,则表同步可能会发生异常。
- 确保在索引创建中途失败后正确重建了表的缓存索引列表(Peter Geoghegan)
以前,失败索引的 OID 可能会保留在列表中,稍后在同一会话中会引起问题。
- 修复 GIN 索引中空的未压缩过帐列表页面的错误处理(Sivasubramanian Ramasubramanian,Alexander Korotkov)
在 pg_upgrade 之前的 GIN 9.4 之前的索引可能会导致 assert 失败(9.4 及更高版本将不会创建此类页面)。
- 填充未命名的 POSIXsignal 量的数组以减少高速缓存行共享(Thomas Munro)
这样可以减少许多 CPU 系统上的争用,从而修复了 Linux 和 FreeBSD 上的性能下降(与以前的版本相比)。
- 确保执行并行索引扫描的进程将响应 signal(Amit Kapila)
以前,并行工作程序可能在 await 索引页上的锁定时陷入困境,而不会注意到中止查询的请求。
- 确保
VACUUM
将响应 btree 页面删除循环中的 signal(Andres Freund)
损坏的 btree 索引可能会在此处导致无限循环,并且以前如果不强制崩溃就无法中断。
- 修复了 inner_unique 优化(David Rowley)引入的哈希联接成本计算错误
在这种优化适用的情况下,这可能会导致错误的计划选择。
- 修复涉及复合类型列的等效类的错误优化(Tom Lane)
这导致无法识别复合列上的索引可以提供该列上的 mergejoin 所需的排序 Sequences。
-
修复计划程序,以避免在某些使用集合返回函数的查询中出现“在目标列表中找不到 ORDER/GROUP BY 表达式”错误(Tom Lane)
-
修复对数据类型使用多态 btree 运算符类的分区键的处理,例如数组(Amit Langote,ÁlvaroHerrera)
-
修复 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,ÁlvaroHerrera) -
修复了无法通过模式限定
getObjectDescription
和getObjectIdentity
输出中的某些对象名称(京田浩口,汤姆·莱恩)的错误
归类,转换,文本搜索对象,发布关系和扩展统计对象的名称在应为架构名称时均不受模式限制。
-
修复
CREATE AGGREGATE
类型检查,以便可以将并行性支持功能附加到可变参数聚合(Alexey Bashtanov) -
将
COPY FROM
的当前行数计数器从 32 位扩展到 64 位(David Rowley)
这样可以避免 Importing 超过 4G 行的两个问题:COPY FROM WITH HEADER
将每 4G 行(而不只是第一行)丢弃一条行,并且错误报告可能显示错误的行号。
- 允许在单用户模式下删除复制插槽(ÁlvaroHerrera)
该用例在版本 10.0 中意外中断。
-
修复在并行聚合模式下运行时来自
variance(int4)
和相关聚合的错误结果(David Rowley) -
在
xmltable()
列表达式中正确处理TEXT
和CDATA
节点(Markus Winand) -
应对 OpenSSL 的
RAND_bytes()
函数可能出现的故障(Dean Rasheed,Michael Paquier)
在极少数情况下,这种疏忽可能导致“无法生成随机取消键”失败,而这种失败只能通过重新启动邮局主管来解决。
- 修复 libpq 对指定
hostaddr
的某些情况的处理(Hari Babu,Tom Lane,Robert Haas)
PQhost()
在某些情况下给出了误导性或不正确的结果。现在,如果指定了主机名,则统一返回主机名;如果仅指定主机名,则返回主机地址;如果省略两个参数,则默认返回主机名(通常为/tmp
或localhost
)。
另外,在验证 SSL 证书时,可能会将错误的值与服务器名称进行比较。
另外,可能会将错误的值与~/.pgpass
中的主机名字段进行比较。现在,如果指定了主机名,则将该字段与主机名进行比较;如果仅指定主机名,则将其与主机地址进行比较;如果省略两个参数,则将其与localhost
进行比较。
此外,报告了错误的错误消息,表示无法解析的hostaddr
值。
另外,当host
,hostaddr
或port
参数包含逗号分隔的列表时,libpq 现在会更加谨慎地将列表的空元素视为选择默认行为。
- 在 ecpg 的
pgtypes
库中添加一个字符串释放函数,从而可以避免 Windows 上的跨模块内存 Management 问题(Takayuki Tsunakawa)
在 Windows 上,如果对给定内存块的free
调用不是由对内存进行malloc
的同一 DLL 进行的,则可能导致崩溃。 pgtypes
库有时会返回它希望调用者释放的字符串,从而使它无法遵循此规则。添加仅包装free
的PGTYPESchar_free()
函数,使应用程序可以遵循此规则。
-
修复 ecpg 在 Windows 以及其他非标准地声明
strtoll
/strtoull
或根本不声明strtoll
/strtoull
的平台上的支持(Dang Minh Huong,Tom Lane) -
当规则更改导致语句内会话(Tom Lane)的语义更改时,修复 PL/pgSQL 中 SQL 语句类型的错误标识
此错误导致 assert 失败,或者在极少数情况下,无法按预期实施INTO STRICT
选项。
-
修复 Client 端程序中的密码提示,以便当
stdin
不是终端时在 Windows 上正确禁用回显(Matthew Stickney) -
进一步解决转储中列表值 GUC 变量的值的错误报价(Tom Lane)
先前对 pg_dump 输出中的search_path
和其他列表值变量加引号的修复原来对于空字符串列表元素而言是不当行为,并且存在长文件路径被截断的风险。
- 修复 pg_dump 无法为约束索引转储
REPLICA IDENTITY
属性的行为(Tom Lane)
正确标记了手动创建的唯一索引,但没有标记pass 语句UNIQUE
或PRIMARY KEY
约束创建的索引。
- 进行 pg_upgrade 检查以确保干净关闭了旧服务器(Bruce Momjian)
先前的检查可能被立即模式关闭所欺骗。
-
修复
contrib/hstore_plperl
,以浏览 Perl 标量引用,并且在找不到预期引用的哈希引用的情况下不会崩溃(Tom Lane) -
修复了 Importing 数组为空时
contrib/ltree
的lca()
函数崩溃的问题(Pierre Ducroquet) -
修复可能报告错误错误代码的各种错误处理代码路径(Michael Paquier,Tom Lane,Magnus Hagander)
-
重新排列 makefile 以确保程序链接到新构建的库(例如
libpq.so
),而不是系统库目录(Tom Lane)中可能存在的程序
这样可以避免在提供 PostgreSQL 库旧副本的平台上构建时出现问题。
- 将时区数据文件更新为 tzdata 版本 2018e,以应对朝鲜的 DST 法律变更以及捷克斯洛伐克的历史更正。
此更新包括在爱尔兰以及过去几年在纳米比亚和捷克斯洛伐克重新定义的“夏令时”。在这些司法管辖区中,法律规定的夏令时为夏季,冬季为夏令时,因此夏令时偏移比标准时间晚一小时,而不是提前一小时。这不会影响实际的 UTC 偏移量或使用的时区缩写。唯一已知的效果是,在这种情况下,pg_timezone_names
视图中的is_dst
列现在在冬季为 true,在夏季为 false。