受支持版本: 15

E.18. 发布版本 15.1 #

发布日期:. 2022-11-10

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

E.18.1. 迁移到版本 15.1 #

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

但是,如果你经常创建和删除超过 1GB 的表,请参见下面的第一个变更日志条目。

E.18.2. 变更 #

  • 修复无法删除大表的非首段文件的问题(Tom Lane) §

    PostgreSQL 将大表拆分为多个文件(通常每个文件 1GB)。删除表的逻辑存在缺陷,在两种情况下会遗漏除第一个文件之外的所有文件:删除临时表和 WAL 重放删除常规表。经常创建数 GB 临时表的应用程序可能会遭受显著的磁盘空间泄漏。

    孤立的临时表文件会在 postmaster 启动时被删除,因此只需更新到 15.1 即可清除任何泄漏的临时表存储。但是,如果你在使用 15.0 时遭遇了数据库崩溃,并且在崩溃之前可能删除了大表,建议检查数据库目录中是否有按照模式 NNNN.NN 命名的文件。如果没有仅命名为 NNNN(不带 .NN 后缀)的匹配文件,则应手动删除这些文件。

  • 修复在可更新视图的 INSERT 的多行 VALUES 子句中出现的 DEFAULT 令牌的处理(Tom Lane) §

    此疏忽可能导致 cache lookup failed for type 错误,或在较旧的分支中甚至导致崩溃。

  • 不允许名为 _RETURN 但不是 ON SELECT 的规则(Tom Lane) §

    这避免了视图的 ON SELECT 规则与其可能拥有的任何其他规则之间的混淆。

  • 避免在使用带常量初始值的 SEARCH BREADTH FIRST 查询时 EXPLAIN VERBOSE 失败 (Tom Lane) §

  • 防止在具有外部表分区的分区表上使用 MERGE(Álvaro Herrera) §

    该情况不被支持,以前会抛出一个难以理解的错误。

  • 修复在执行 ALTER TABLE ATTACH PARTITION 时按分区构建外键约束的问题 (Jehan-Guillaume de Rorthais,Álvaro Herrera) § §

    之前,可能会为新添加的分区构建不正确或重复的约束。

  • 修复在分区表或继承表上使用扩展统计时的规划器失败(Richard Guo,Justin Pryzby) §

    某些情况会因 cache lookup failed for statistics object 而失败。

  • 修复 GIN 索引快速插入路径中 WAL 操作的错误排序 (Matthias van de Meent,Zhang Mingli) §

    此错误在核心 PostgreSQL 中没有已知的负面后果, 但确实导致了一些扩展的问题。

  • 修复在重放起始点位于事务开始和其子事务开始之间时 逻辑解码中的错误 (Masahiko Sawada,Kuroda Hayato) § §

    这些错误可能导致调试构建中的断言失败, 否则会导致内存泄漏。

  • 在逻辑解码的更多位置接受中断 (Amit Kapila,Masahiko Sawada) § §

    这改善了复制工作进程缓慢关闭的问题。

  • 防止在复制工作进程中尝试复制到外部表分区 (Shi Yu,Tom Lane) §

    虽然分区表可以有外部表作为分区,但目前不支持复制到此类分区。 如果尝试这样做,逻辑复制工作进程会崩溃。 现在会抛出一个错误。

  • 避免在复制工作进程中函数语法错误后崩溃 (Maxim Orlov,Anton Melnikov,Masahiko Sawada,Tom Lane) §

    如果在逻辑复制工作进程中执行的 SQL 语言或 PL/pgSQL 语言 CREATE FUNCTIONDO 命令中发生语法错误,工作进程会因空指针解引用或断言失败而崩溃。

  • 避免对归档模块的关闭回调进行双重调用(Nathan Bossart,Bharath Rupireddy) §

  • 增加对尝试访问没有表访问方法的表的规划时检查 (Tom Lane) §

    这防止了某些目录损坏场景中的崩溃,例如使用了 ON SELECT 规则缺失的视图。

  • 防止共享内存状态损坏时 postmaster 崩溃 (Tom Lane) §

    postmaster 进程应该在共享内存损坏时存活并启动数据库重启, 但有一段代码在这方面不够谨慎。

  • libpq 中,正确处理管道模式下的单行模式 (Denis Laxalde) §

    如果管道模式同时激活,单行标志未在正确的时间重置。

  • 修复 psql 在命令行查询被取消时的退出状态(Peter Eisentraut) §

    psql -c query 在查询被取消时会以成功状态退出。修复为像其他错误情况一样以非零状态退出。

  • 允许在 pg_basebackup 中进行跨平台表空间重定位 (Robert Haas) §

    允许 --tablespace-mapping 中的远程路径 为 Unix 风格或 Windows 风格的绝对路径, 因为源服务器可能与本地系统运行在不同的操作系统上。

  • 修复 pg_dump 无法导出某些 CHECK 约束上附加的注释的问题(Tom Lane) §

  • 修复 CREATE DATABASE 以允许其 oid 参数超过 231(Tom Lane) §

    此疏忽导致当源安装包含 OID 大于此值的数据库时 pg_upgrade 无法成功。

  • pg_stat_statements 中,修复对已释放内存的访问 (zhaoqigui) §

    pg_stat_statements 跟踪通过扩展查询协议发出的 ROLLBACK 命令时会出现此问题。 在调试构建中,这始终导致断言失败。 在生产构建中,通常没有可见的不良影响;但如果释放的内存已经被重用, 很可能的结果是存储查询字符串的垃圾数据。

  • 修复与 LLVM 15 的不兼容问题(Thomas Munro,Andres Freund) §

  • 允许在任何机器上使用 __sync_lock_test_and_set() 实现自旋锁(Tom Lane) §

    这简化了向新机器架构的移植,至少在使用支持此 GCC 内置函数的编译器时。

  • 将符号 REF 重命名为 REF_P 以避免在最近的 macOS 上编译失败(Tom Lane) §

  • 避免使用 sprintf,以避免编译时的弃用警告 (Tom Lane) §

  • 将时区数据文件更新为 tzdata 2022f 版本,包含智利、斐济、伊朗、约旦、 墨西哥、巴勒斯坦和叙利亚的夏令时法规变更, 以及智利、克里米亚、伊朗和墨西哥的历史修正。(Tom Lane) §

    此外,Europe/Kiev 时区已重命名为 Europe/Kyiv。 另外,以下时区已合并到附近的、人口更多的、 自 1970 年以来时钟一致的时区中: Antarctica/Vostok、Asia/Brunei、 Asia/Kuala_Lumpur、Atlantic/Reykjavik、Europe/Amsterdam、 Europe/Copenhagen、Europe/Luxembourg、Europe/Monaco、Europe/Oslo、 Europe/Stockholm、Indian/Christmas、Indian/Cocos、Indian/Kerguelen、 Indian/Mahe、Indian/Reunion、Pacific/Chuuk、Pacific/Funafuti、 Pacific/Majuro、Pacific/Pohnpei、Pacific/Wake 和 Pacific/Wallis。 (这间接影响了已经是这些时区别名的时区: Arctic/Longyearbyen、Atlantic/Jan_Mayen、Iceland、 Pacific/Ponape、Pacific/Truk 和 Pacific/Yap。) America/Nipigon、America/Rainy_River、America/Thunder_Bay、 Europe/Uzhgorod 和 Europe/Zaporozhye 也被合并到附近的时区中, 因为发现它们声称的 1970 年后与这些时区的差异似乎是错误的。 在所有这些情况下,之前的时区名称仍作为别名保留; 但实际数据是所合并到的时区的数据。

    这些时区合并导致被合并时区的 1970 年前时区历史丢失, 这对于期望 timestamptz 显示一致性的应用程序可能造成困扰。 例如,存储的值 1944-06-01 12:00 UTC 在选择 Europe/Stockholm 时区时,之前会显示为 1944-06-01 13:00:00+01, 但现在会显示为 1944-06-01 14:00:00+02

    可以使用选项构建时区数据文件来恢复旧的时区数据, 但该选择也会插入大量其他旧的(且通常缺乏充分证据的)时区数据, 导致相比接受这些上游更改,总变化更多。 PostgreSQL 选择按照推荐方式发布 tzdb 数据, 据我们所知,大多数主要操作系统发行版也在这样做。 但是,如果这些更改给你的应用程序造成了严重问题, 一个可能的解决方案是使用 tzdb 的向后兼容选项安装本地构建的时区数据文件 (参见其 PACKRATDATAPACKRATLIST 选项)。

提交更正

如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。