E.8.版本 10.6

发布日期: 2018-11-08

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

E.8.1. 迁移到版本 10.6

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

但是,如果您使用pg_stat_statementsextensions,请参阅下面的更改日志条目。

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

E.8.2. Changes

非特权用户可以利用这种监督方式在下一次转储/重新加载或 pg_upgrade 运行期间获取超级用户特权。 (CVE-2018-16850)

提供无效的对象 OID 时,返回 NULL 而不是引发错误。其中一些功能已经实现了正确的功能,但不是全部。 has_column_privilege()还能够在某些平台上崩溃。

这种疏忽可能导致解析错误,或导致错误的优先级分配。

如果将光标放回较早的关系,则扫描多个关系(尤其是继承树)的游标可能会产生错误的行为。

如果它们包含诸如CASE结构中不相关的 subSELECT之类的代码,则这将导致难以重现的崩溃或并发更新中的错误答案。

理想情况下,我们允许这样做,但目前必须将其阻止以避免崩溃。

此错误影响了全文搜索操作以及contrib/ltreecontrib/pg_trgm

由于不同的工作人员获得不同的答案,因此这种情况可能导致行为不一致,这是由于行 Sequences 变化导致不确定性的结果。

所有权更改也应传播到这样的序列,但是外国表却忽略了这一点。

仅在使用 SP-GiST 的排除约束在单个命令中接收到许多新索引条目的情况下,这才有意义。

以前,文件 Descriptors 已泄漏,最终导致逻辑解码期间失败。

这样可以防止在工作程序中执行transaction_timestamp()之类的功能时出现异常行为。

根据archive_mode的设置,备用数据库可能无法删除某些可以删除的 WAL 文件。

如果提交时间戳跟踪已打开或关闭,则恢复可能会由于尝试获取未记录事务的提交时间戳而失败。

此更改的主要实际效果是,它避免了由于始终使用相同的随机种子而导致名称冲突,initdb 可能会错误地推断出 POSIX 共享内存不可用的情况。

我们不认为这是好的扩展编码实践,但是它大多数在并行查询之前就起作用了,因此现在 continue 支持它。

加载到后端地址空间中的共享库可以使用这些功能的后端版本,而不是按预期使用它们自己的副本。由于两组功能的行为并不完全相同,因此会导致失败。

这样可以防止在 WAL 重播期间备用服务器达到一致的数据库状态之后可能出现的异常行为。

以前,我们对此并不小心,原因是 FSM 仍然不是关键数据。但是,如果它已过时,则在将备用数据库升级为主数据库后,可能会导致性能显着下降。 FSM 最终将通过更新得到修复,但我们希望它早日成为好事,因此在 WAL 重播期间要更加努力地维护它。

如果调用者此后无法要求向后扫描,则可以在此时关闭执行程序。

如果在扩展脚本中执行CREATE USER MAPPING,则会为用户 Map 创建扩展依赖关系,这是意外的。角色不能是扩展成员,因此用户 Map 也不应该是扩展成员。

当成功连接到列表中的较早服务器之一时,这可以防止不必要的故障或连接速度慢。

以前,某些代码路径在切换到新的目标主机时无法重新启动计时器,这可能导致过早的超时。

这修复了以下情况:psql 在下一条命令之后才报告收到NOTIFY消息。

这样可以避免由于使用限制性搜索路径运行还原的新策略而导致的失败。

pg_upgrade 无法保留事件触发器的扩展成员资格状态。

以前,一些与多维数据集相关的函数可以构造将被cube_in()拒绝的值,从而导致转储/重新加载失败。

pg_read_all_stats仅用于授予读取统计信息的权限,而不是对其进行更改,因此此授予是错误的。

为使此更改生效,请在已安装pg_stat_statements的每个数据库中运行ALTER EXTENSION pg_stat_statements UPDATE

以前,它尝试使用搜索路径查找字典,如果搜索路径具有限制性值,则该字典可能会失败。

调整 configure,将-isysroot开关添加到CPPFLAGS;否则,PL/Perl 和 PL/Tcl 无法在 macOS 10.14 上进行配置或构建。通过在 configure 或 make 的参数中设置PG_SYSROOT变量,可以在配置时或构建时覆盖使用的特定 sysroot。

现在建议与 Perl 相关的扩展在其编译器标志中写入$(perl_includespec)而不是-I$(perl_archlibexp)/CORE。后者可以 continue 在大多数平台上运行,但不适用于最新的 macOS。

另外,不再需要手动指定--with-tclconfig来使 PL/Tcl 构建在最新的 macOS 版本上。

默认情况下,Perl 不再在其搜索路径中包括当前目录。解决这个问题。

为了安全地执行此操作,pg_regress 现在在启动时放弃了任何此类特权。

到目前为止,我们已经禁止返回特定于数据类型的比较函数INT_MIN,这允许调用者仅通过对比较结果求反就可以反转排序 Sequences。但是,这对于直接返回memcmp()strcmp()等结果的比较函数从来都不是安全的,因为 POSIX 对这些函数没有任何此类限制。至少memcmp()的某些最新版本可以返回INT_MIN,从而导致错误的排序 Sequences。因此,我们删除了此限制。现在,如果调用者希望反转排序 Sequences,则必须使用INVERT_COMPARE_RESULT()宏。

例如,此错误可能导致无法访问刚由VACUUM FULL处理的系统目录或索引。

此更改为LockAcquire添加了一个新的结果代码,这可能会影响该函数的外部调用者,尽管只有非常不寻常的用法模式才会有问题。 LockAcquireExtended的 API 也已更改。

当一个使用 SPI 的函数调用另一个函数时,这可以防止可能的干扰。

发明新的联合类型PGAlignedBlockPGAlignedXLogBlock,并使用它们代替纯字符数组,以确保编译器无法将缓冲区放置在未对齐的起始地址处。这可以解决在对对齐要求不高的平台上可能发生的核心转储,甚至可以在允许不对齐的平台上提高性能。

在使用此代码的平台上(通常是 Windows),如果调用代码采用 C99 语义,则 C99 之前的行为可能导致无法检测到缓冲区溢出。

这样可以避免浮点溢出检查遗漏的问题。

在 Linux 上使用 icc 进行构建时(可能在其他情况下),先前的编码得到了错误的答案,从而导致 libpq 不会针对系统报告的错误返回有用的错误消息。

上一章 首页 下一章