选择 打开 改范围 完整检索页

PostgreSQL 10.3 发布说明

E.21. 发布版本 10.3 #

发布日期:. 2018-03-01

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

E.21.1. 迁移到版本 10.3

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

但是,如果您的安装中并非所有用户都相互信任,或者您维护的应用程序或扩展需要用于各种场景,强烈建议阅读下方第一条变更日志所述的文档变更,并采取适当措施,确保您的安装或代码安全。

另外,下方变更记录中第二项所述的修改,可能使索引表达式或物化视图中使用的函数在自动分析期间或从转储重载时失败。升级后,请监视服务器日志中是否有此类问题,并修复受影响的函数。

此外,如果是从早于 10.2 的版本升级,请参见 Section E.22

E.21.2. 变更

  • 记录如何配置安装和应用程序,以防范其他用户利用搜索路径发起的特洛伊木马攻击(Noah Misch)

    如果 search_path 设置包含恶意用户可写的任何模式,该用户就能控制查询,进而以被攻击用户的权限运行任意 SQL 代码。虽然可以编写不受此类劫持影响的查询,但写法十分繁琐,也很容易遗漏漏洞。因此,我们现在建议配置搜索路径时不要包含任何不可信模式。相关文档见 Section 5.8.6(面向数据库管理员和用户)、Section 33.1(面向应用作者)、Section 37.15.6(面向扩展作者),以及 CREATE FUNCTION(面向 SECURITY DEFINER 函数作者)。(CVE-2018-1058)

  • 避免在 pg_dump 和其他客户端程序中使用不安全的 search_path 设置(Noah Misch,Tom Lane)

    pg_dumppg_upgradevacuumdb 以及其他由 PostgreSQL 提供的应用本身,也容易受到上一条变更记录中所述的劫持攻击;由于这些应用通常由超级用户运行,它们尤其容易成为攻击目标。为确保无论整个安装环境是否已做好安全配置,这些应用本身都安全,将它们的 search_path 设置修改为只包含 pg_catalog 模式。自动清理工作进程现在也采用相同做法。

    如果这些程序间接执行用户提供的函数,例如索引表达式中的用户函数,更严格的 search_path 可能导致错误。需要调整这些用户函数,消除它们对调用时搜索路径的任何假设,才能修正这些错误。这一直是良好实践,而现在则是保证行为正确的必要条件。(CVE-2018-1058)

  • 防止逻辑复制尝试传送不可发布关系的变更(Peter Eisentraut)

    标记为 FOR ALL TABLES 的发布会错误地传送物化视图和 information_schema 表的变更,而这些变更本应从变更流中排除。

  • 修复子计划中存在 CTE 引用时并发更新重新检查的错误行为(Tom Lane)

    如果 InitPlan 或 SubPlan 使用了 CTE(WITH 子句引用),且查询因尝试更新或锁定被并发更新的行而需要重新检查,就可能产生不正确的结果。

  • 修复外连接中存在重叠归并连接子句时规划器失败的问题(Tom Lane)

    这些问题会在边界情况下导致 left and right pathkeys do not match in mergejoinouter pathkeys do not match mergeclauses 规划器错误。

  • 修复 pg_upgrade 未保留物化视图的 relfrozenxid 的问题(Tom Lane,Andres Freund)

    这一疏漏可能在升级后导致物化视图中的数据损坏,表现为 could not access status of transactionfound xmin from before relfrozenxid 错误。很少刷新的物化视图,或仅使用 REFRESH MATERIALIZED VIEW CONCURRENTLY 维护的物化视图,更容易出现此问题。

    如果发现此类损坏,可以通过刷新物化视图(不使用 CONCURRENTLY)来修复。

  • 修复某些非默认序列界限值的 pg_dump 输出不正确的问题(Alexey Bashtanov)

  • 修复 pg_dumpSTATISTICS 对象处理不当的问题(Tom Lane)

    扩展统计对象所属的模式在转储目录中标注错误,可能导致按模式选择性恢复时产生错误结果。其所有权也未正确恢复。此外,调整逻辑,将统计对象作为独立对象决定是否转储和恢复,不再将这一决定与其所在表的转储和恢复决定绑定。原来的定义无法适应计划在未来增加的跨表统计功能。

  • 修复错误 CONTEXT 堆栈中 PL/Python 函数名报告不正确的问题(Tom Lane)

    嵌套 PL/Python 函数调用(即从另一个 PL/Python 函数通过 SPI 查询到达的调用)内部发生错误时,堆栈跟踪会将内部函数名显示两次,未产生预期结果。此外,嵌套 PL/Python DO 块中的错误在某些平台上可能导致空指针解引用崩溃。

  • 允许 contrib/auto_explainlog_min_duration 设置最大达到 INT_MAX,即约 24 天,而非 35 分钟(Tom Lane)

  • 将多个 GUC 变量标记为 PGDLLIMPORT,以便将扩展模块移植到 Windows(Metin Doslu)