pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
发布日期:. 2020-11-12
此版本包含自 9.6.19 以来的多种修复。 有关 9.6 大版本中新特性的信息,参见 第 E.25 节。
禁止在索引表达式和物化视图查询中执行 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 恢复尝试失败。
在“smart”关闭期间,直到所有客户端(前台)会话结束之前不要 终止后台进程(Tom Lane)
原来的行为破坏了并行查询处理,因为 postmaster 会终止并行工作者并拒绝 启动新的。它还导致自动清理停止工作,如果幸存的客户端会话进行大量 数据更改,这可能有严重的长期影响。
避免 postmaster 处理信号时递归消耗栈空间(Tom Lane)
据观察,大量使用并行处理会因过多并发信号请求创建并行工作者进程而导致 postmaster 崩溃。
避免因 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。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。