↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

已结束支持的版本: 9.5
历史版本。 PostgreSQL 9.5 已结束支持。 2021-02-11. 请参阅 当前版本手册.

E.2. 版本 9.5.24 #

发布日期:. 2020-11-12

此版本包含自 9.5.23 以来的多种修复。有关 9.5 大版本中新特性的信息,参见第 E.26 节。

PostgreSQL 社区将于 2021 年 2 月停止对 9.5.X 版本系列的更新。建议用户尽快更新到较新的版本分支。

E.2.1. 迁移到版本 9.5.24

对于运行 9.5.X 的用户,不需要转储/恢复。

不过,如果你是从 9.5.20 之前的版本升级,参见第 E.6 节。

E.2.2. 变更

  • 禁止在索引表达式和物化视图查询中执行 DECLARE CURSOR ... WITH HOLD 以及触发延迟触发器(Noah Misch)

    这本质上是“安全受限操作”沙箱机制中的一种泄漏。有权创建非临时 SQL 对象的攻击者可以利用此泄漏以超级用户身份执行任意 SQL 代码。

    PostgreSQL 项目感谢 Etienne Stalmans 报告此问题。(CVE-2020-25695)

  • 修复 pg_dump、pg_restore、 clusterdb、reindexdb 和 vacuumdb 中复杂连接字符串参数的用法(Tom Lane)

    pg_dump 和 pg_restore 的 -d 参数,或所述其他程序的 --maintenance-db 参数,可以是包含多个连接参数的“连接字符串”而不只是数据库名。在这些程序需要发起额外连接的场合(如并行处理或多数据库处理),连接字符串被遗忘,额外连接只使用了基本连接参数(数据库名、主机、端口和用户名)。如果连接字符串包含任何其他必要信息(如非默认的 SSL 或 GSS 参数),这可能导致连接失败。更糟的是,连接可能成功但没有按预期加密,或者容易受到原本预期的连接参数可以阻止的中间人攻击。(CVE-2020-25694)

  • 当 psql 的 \connect 命令复用连接参数时,确保先前连接字符串中所有未被覆盖的参数都被复用(Tom Lane)

    这避免了因遗漏相关参数(如非默认的 SSL 或 GSS 选项)而导致重连失败的情况。更糟的是,重连可能成功但没有按预期加密,或者容易受到原本预期的连接参数可以阻止的中间人攻击。这与刚才提到的 pg_dump 等程序的问题基本相同,不过 psql 的行为更复杂,因为用户可能有意覆盖某些连接参数。(CVE-2020-25694)

  • 防止 psql 的 \gset 命令修改特殊处理的变量(Noah Misch)

    不带前缀的 \gset 会覆盖服务器让它设置的任何变量。因此,一个被攻破的服务器可以设置 PROMPT1 等特殊处理的变量,从而能够在用户的会话中执行任意 shell 代码。

    PostgreSQL 项目感谢 Nick Cleaton 报告此问题。(CVE-2020-25696)

  • 防止并发截断 SLRU 日志可能导致的数据丢失(Noah Misch)

    这一罕见问题之后会表现为 “apparent wraparound” 或 “could not access status of transaction” 错误。

  • 确保检查点期间正确 fsync SLRU 目录(Thomas Munro)

    这防止了后续操作系统崩溃时可能的数据丢失。

  • 修复对具有 BYPASSRLS 属性的用户的 ALTER ROLE(Tom Lane、Stephen Frost)

    BYPASSRLS 属性只允许超级用户更改,但其他 ALTER ROLE 操作(如更改密码)应只需普通权限检查即可。原来的编码错误地把对此类角色的所有更改都限制为超级用户。

  • 修复带继承的 CREATE TABLE LIKE 中表达式的处理(Tom Lane)

    如果一条 CREATE TABLE 命令同时使用了 LIKE 和传统继承,来自 LIKE 父表的 CHECK 约束和表达式索引中的列引用容易被编错号,导致错误答案和/或离奇的错误消息。在拥有该特性的分支中,GENERATED 表达式也可能发生同样的问题。

  • 修复 to_date() 和 to_timestamp() 中负年份转换为公元前日期的差一错误(Dar Alathar-Yemen、Tom Lane)

    同时,让负年份与显式“BC”标记的组合相互抵消并产生公元日期。

  • 确保 archive_mode 设为 always 时备库服务器会归档 WAL 时间线历史文件(Grigory Smolkin、Fujii Masao)

    这一疏漏可能导致后续 PITR 恢复尝试失败。

  • 避免因 SIGQUIT 退出时运行 atexit 处理器(Kyotaro Horiguchi、Tom Lane)

    大多数服务器进程已经遵循这一做法,但归档器进程被遗漏了。仍在等待客户端启动包的后端也做错了。

  • 避免错误优化引用表面常量分组列的子查询限定条件(Tom Lane)

    如果“常量”子查询输出列是只出现在部分分组集中的分组列,它就不是真正的常量。

  • 避免 SQL 函数内联改变潜在可哈希子计划比较表达式形状时的失败(Tom Lane)

  • 在构建或重建索引期间,容忍并发更新导致的新 HOT 链的出现(Anastasia Lubennikova、Álvaro Herrera)

    这一疏漏可能导致 “failed to find parent tuple for heap-only tuple” 错误。

  • 确保数据在插入 BRIN 索引之前被解 TOAST(Tomas Vondra)

    索引条目不应包含外联 TOAST 指针,但 BRIN 没有遵守这一点。这可能导致 “missing chunk number 0 for toast value NNN” 之类的错误。(如果现有索引报出这种错误,REINDEX 就足以修复。)

  • 在 BRIN 索引扫描期间正确处理并发取消摘要(Alexander Lakhin、Álvaro Herrera)

    此前,如果某个页范围恰好在错误的时间被取消摘要,索引扫描可能错误地报出指示索引损坏的错误。

  • 修复多列 GIN 索引扫描中罕见的 “lost saved point in index” 错误(Tom Lane)

  • 修复事件触发器监视 ALTER TABLE 操作时的释放后使用风险(Jehan-Guillaume de Rorthais)

  • 修复关于移动聚合数据类型不一致的错误错误消息(Jeff Janes)

  • 避免并行工作者报告很长的错误消息时的锁死(Vignesh C)

  • 避免通过共享内存队列传输超大载荷时不必要的失败(Markus Wanner)

  • 修复 RLS 策略导致的关系缓存内存泄漏(Tom Lane)

  • 修复 SIGHUP 处理判定新的 GUC 变量值必须重启才能应用时的小内存泄漏(Tom Lane)

  • 让 libpq 支持 .pgpass 文件中任意长度的行(Tom Lane)

    这主要用于允许使用很长的安全令牌作为密码。

  • 在 Windows 的 libpq 中,每进程调用一次 WSAStartup(),完全不调用 WSACleanup()(Tom Lane、Alexander Lakhin)

    此前,libpq 在连接开始时调用 WSAStartup(),在连接清理时调用 WSACleanup()。然而,调用 WSACleanup() 似乎会干扰其他程序操作;特别是,我们观察到向 stdout 输出预期内容偶尔失败。省略该调用似乎没有不良影响,因此就这么做。(这还消除了程序执行一系列数据库连接时因反复加载和卸载 DLL 导致的性能问题。)

  • 修复 ecpg 库在 Windows 上的每线程初始化逻辑(Tom Lane、Alexander Lakhin)

    多线程的 ecpg 应用可能因错误的锁定而出现罕见的错误行为。

  • 在 Windows 上,让 psql 以文本模式而非二进制模式读取反引号命令的输出(Tom Lane)

    这确保正确处理换行符。

  • 确保 pg_dump 收集扩展配置表的逐列信息(Fabrízio de Royes Mello、Tom Lane)

    没有做到这一点会导致指定 --inserts 时崩溃,或在使用 COPY 重新装载表数据时生成欠指定(虽然通常正确)的 COPY 命令。

  • 让 pg_upgrade 检查目标集簇中表空间目录的预先存在(Bruce Momjian)

  • 修复 contrib/pgcrypto 中潜在的内存泄漏(Michael Paquier)

  • 在 contrib/pgcrypto 中为一个不太可能发生的失败情况添加检查(Daniel Gustafsson)

  • 在 configure 的测试程序中使用 return 而非 exit()(Peter Eisentraut)

    这避免了更挑剔的编译器下的失败。

  • 更新时区数据文件到 tzdata 版本 2020d,涉及斐济、摩洛哥、巴勒斯坦、加拿大育空、麦夸里岛和凯西站(南极洲)的夏令时法规变更,以及法国、匈牙利、摩纳哥和巴勒斯坦的历史修正。

  • 把我们的时区库副本与 IANA tzcode 版本 2020d 同步(Tom Lane)

    这吸收了上游把 zic 默认输出选项从 “fat” 改为 “slim” 的变更。对我们的用途而言这只是表面变化,因为我们在 v13 之前的分支中继续选择 “fat” 模式。这一更改还确保 strftime() 不会在未失败时更改 errno。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.