↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 11
历史版本PostgreSQL 11 已于 2023 年 11 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页。

E.1. 发布版本 11.22 #

发布日期:. 2023-11-09

本次发布包含来自 11.21 的多项修复。有关 11 主版本新特性的说明,请参见第 E.23 节。

这预计将是 PostgreSQL 11.X 系列的最后一个发行版。建议用户尽快更新到更新的发行分支。

E.1.1. 迁移到版本 11.22

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

但是,如果是从早于 11.21 的版本升级,请参见第 E.2 节。

E.1.2. 变更

  • 修复 DISTINCT "any" 聚合函数中对未知类型参数的处理(Tom Lane)

    此错误导致 text 类型的值在运行时被解释为 unknown 类型的值(即以零终止的字符串)。这可能导致泄露 text 值之后的服务器内存。

    PostgreSQL 项目感谢 Jingzhou Fu 报告此问题。(CVE-2023-5868)

  • 检测计算新数组维度时的整数溢出(Tom Lane)

    当向超出当前数组边界的数组下标赋予新元素时,在极端情况下可能发生未检测到的整数溢出。可能利用内存越界写入来执行任意代码,也可能泄露服务器内存。

    PostgreSQL 项目感谢 Pedro Gallegos 报告此问题。(CVE-2023-5869)

  • 防止 pg_signal_backend 角色向后台工作进程和自动清理进程发送信号(Noah Misch,Jelte Fennema-Nio)

    文档说明 pg_signal_backend 不能向超级用户拥有的进程发送信号。但它能够向这些后台进程发送信号,因为它们公布的角色 OID 为零。现在将此视为表示超级用户所有权。取消这些进程类型之一的安全影响就核心代码而言相当小(我们只会启动另一个),但扩展可能添加更容易受影响的后台工作进程。

    同时确保在这些进程中正确设置 is_superuser 参数。对于该疏忽,目前没有已知的具体安全后果,但对于某些扩展来说可能是重要的。

    PostgreSQL 项目感谢 Hemanth Sandrana 和 Mahendrakar Srinivasarao 报告此问题。(CVE-2023-5870)

  • 修复具有多个分区键的 hash 分区表的分区步骤生成和运行时分区剪枝(David Rowley)

    某些涉及其中一个分区键上 IS NULL 条件的情况可能导致崩溃。

  • 修复 B-树标记/恢复处理 ScalarArrayOpExpr 子句时的边界情况(Peter Geoghegan)

    将索引扫描恢复到先前标记的位置时,如果扫描恰好前进到 ScalarArrayOpExpr(即 indexcol = ANY(ARRAY[]))子句的匹配末尾,代码可能会遗漏必要的设置步骤。这可能导致漏掉一些应当被获取的行。

  • 修复当集合返回函数反复返回零行时的查询内内存泄漏(Tom Lane)

  • 修复将 cursor_to_xmlschema() 应用于非数据返回 Portal 时的崩溃(Boyu Yang)

  • 在各种 SQL 函数中更妥善地处理无效索引(Noah Misch)

    如果将 pgstatindex()、pgstatginindex()、pgstathashindex() 或 pgstattuple() 应用于无效索引,现在会报告错误。如果将 brin_desummarize_range()、brin_summarize_new_values()、brin_summarize_range() 或 gin_clean_pending_list() 应用于无效索引,则除了报告一条调试级别的消息外不做任何操作。之前这些函数会尝试处理该索引,并可能根据失败的 CREATE INDEX 遗留的内容而以奇怪的方式失败。

  • 避免在 to_tsvector() 处理长输入时过早的内存分配失败(Tom Lane)

  • 修复 tsvectorrecv() 中构造的 tsvector 的过度分配(Denis Erokhin)

    如果传入的向量包含位置数据,二进制接收函数会在完成的 tsvector 中留下浪费的空间(大约等于位置数据的大小)。在极端情况下,这可能导致对于发出时在长度限制内的向量产生“maximum total lexeme length exceeded”失败。无论如何都可能导致磁盘空间浪费。

  • 修复 gtsvector_picksplit() 中的不正确编码(Alexander Lakhin)

    这可能导致 tsvector 列上 GiST 索引的页面分裂决策不佳。

  • 确保在删除 ON COMMIT DROP 临时表时拥有快照(Tom Lane)

    这可以防止当临时表的某些目录条目的字段宽度足够大而需要 toast 时(例如非常复杂的 CHECK 条件)可能出现的异常行为。

  • 避免在 system() 刚刚 fork 的子进程中对关闭信号的不当响应(Nathan Bossart)

    此修复避免了一个竞争条件:由 system() fork 出来但尚未 exec 目标子程序的子进程可能接收并处理原本发给父服务器进程的信号。这将导致重复的清理操作,后果不佳。

  • 避免在相关 SQL 函数中对 pg_control 的撕裂读取(Thomas Munro)

    在读取 pg_control 之前获取适当的锁,以确保获得该文件的一致视图。

  • 跟踪缓存的 CALL 语句的依赖关系,并在需要时重新规划(Tom Lane)

    DDL 命令,例如替换已内联到 CALL 参数中的函数,可能需要重新规划已被 PL/pgSQL 缓存的 CALL。之前这不会发生,导致异常行为或诸如“cache lookup failed”之类的奇怪错误。

  • 在检查来自外层查询级别的 RECORD 类型 Var 时正确跟踪嵌套深度(Richard Guo)

    此疏忽可能导致断言失败、核心转储或“bogus varno”错误。

  • 避免逆解析包含对复合常量字段引用的视图时出现“record type has not been registered”错误(Tom Lane)

  • 允许从 RECORD 类型的 ROW() 表达式中提取字段(Tom Lane)

    知道我们将这些字段命名为 f1、f2 等的 SQL 代码,可以使用这些名称从表达式中提取字段。此项修改最初在版本 13 中完成,现在反向移植到更早的分支,以支持一个相关缺陷的测试。

  • 修复 RECORD 类型缓存管理中的错误处理缺陷(Thomas Munro)

    在恰好错误的时刻发生内存不足错误可能留下不一致的状态,导致无限循环。

  • 修复在同一会话中出错后重试逻辑解码时的断言失败(Hou Zhijie)

  • 避免对在解析分析过程中不接受有意义处理的工具语句进行计划缓存重新验证(Tom Lane)

    除了节省一些开销外,这还可以防止在缓存失效后对于不能设置快照的语句(如 SET TRANSACTION ISOLATION LEVEL)发生失败。

  • 在使用期间将按引用传递的 attmissingval 值保存在长生命周期的上下文中(Andrew Dunstan)

    这避免了当元组槽的生命周期超过用于构造其值的元组描述符时可能出现的悬挂指针使用。

  • 在 ALTER ROLE 之后重新计算 search_path 的有效值(Jeff Davis)

    这确保在重命名角色后,特殊字符串 $user 的含义会被重新确定。

  • 修复 GenericXLogFinish 中的操作顺序(Jeff Davis)

    此代码在将更改的缓冲区标记为脏之前就写入了 WAL,违反了崩溃安全所需的条件。核心代码没有使用此函数,但扩展会使用(例如 contrib/bloom)。

  • 移除 PL/Python 异常处理中的不正确断言(Alexander Lakhin)

  • 修复 pg_restore,使选择性恢复能够同时包含所选表的表级和列级 ACL(Euler Taveira,Tom Lane)

    之前,如果两种类型都存在,只会恢复表级 ACL。

  • 避免在 pg_basebackup 中生成无效的临时槽名(Jelte Fennema)

    这仅在服务器连接通过 pgbouncer 时被观察到。

  • 在 contrib/amcheck 中,不将被中断的页面删除报告为损坏(Noah Misch)

    此修复防止了“the first child of leftmost target page is not leftmost of its level”、“block NNNN is not leftmost”或“left link/right link pair in index XXXX not in agreement”的误报。这些误报出现在 amcheck 在未完成的 B-树索引页面删除之后且 VACUUM 清理之前运行时。

  • 修复 contrib/btree_gin 在 interval 列上的索引在执行使用 < 或 <= 操作符的索引扫描时的失败(Dean Rasheed)

    这样的索引扫描无法返回所有应返回的条目。

  • 消除在最新 macOS 上的各种编译时警告(Tom Lane)

    Xcode 15(随 macOS Sonoma 发布)改变了链接器的行为方式,在构建 PostgreSQL 时导致许多重复库警告。这些警告是无害的,但很烦人,因此避免两次引用相同的库。同时移除了 -multiply_defined suppress 链接器选项的使用,该选项显然长期以来一直没有实际作用,而现在使用它会引发警告。

  • 从默认时区缩写列表中移除 PHOT(凤凰群岛时间)(Tom Lane)

    此缩写在默认列表中的存在可能导致在最新的 Debian 和 Ubuntu 发行版上出现失败,因为它们不再默认安装底层的 tzdb 条目。由于这是一个为总人口约二十几人的区域编造的缩写,不太可能有人会需要它。如果确有需要,可以通过自定义缩写文件将其恢复。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。