PostgreSQL 全球开发组发布了所有受支持 PostgreSQL 版本的更新,包括 14.3、13.7、12.11、11.16 和 10.21。本次发布修复了一个安全漏洞以及过去三个月报告的 50 多个 Bug。
我们建议您尽早安装此更新。
如果您在使用 ltree (https://www.postgresql.org/docs/current/ltree.html) 数据类型的列上有 GiST 索引,升级后需要对其进行重建索引 (https://www.postgresql.org/docs/current/sql-reindex.html)。
完整的变更列表请查看发布说明 (https://www.postgresql.org/docs/release/)。
PostgreSQL 10 生命周期终止通知
PostgreSQL 10 将于 2022 年 11 月 10 日停止接收修复。如果您在生产环境中运行 PostgreSQL 10,建议您制定升级到更新的受支持 PostgreSQL 版本的计划。更多信息请参阅我们的版本策略 (https://www.postgresql.org/support/versioning/)。
安全问题
CVE-2022-1552 (https://www.postgresql.org/support/security/CVE-2022-1552/):Autovacuum、REINDEX 等操作遗漏了"安全受限操作"沙箱。
受影响版本:10 - 14。安全团队通常不测试已停止支持的版本,但此问题由来已久。
Autovacuum、REINDEX、CREATE INDEX、REFRESH MATERIALIZED VIEW、CLUSTER 和 pg_amcheck 在特权用户维护其他用户的对象时,未能完整地采取安全操作措施。这些命令激活相关保护机制的时机过晚或根本未激活。在至少一个模式中拥有创建非临时对象权限的攻击者可以在超级用户身份下执行任意 SQL 函数。
虽然及时更新 PostgreSQL 是大多数用户的最佳修复方案,但无法更新的用户可以通过以下变通方法缓解漏洞:禁用 autovacuum,不手动运行上述命令,以及不从 pg_dump 命令的输出进行恢复。采用此变通方法后性能可能会迅速下降。VACUUM 是安全的,当受信任的用户拥有目标对象时,所有命令也都是安全的。
PostgreSQL 项目感谢 Alexander Lakhin 报告此问题。
Bug 修复与改进
本次更新修复了过去几个月报告的 50 多个 Bug。以下列出的问题影响 PostgreSQL 14。其中一些问题也可能影响其他受支持的 PostgreSQL 版本。
本次发布包含:
修复了可能导致 ltree (https://www.postgresql.org/docs/current/ltree.html) 列上 GiST 索引损坏的问题。升级后,您需要对 ltree (https://www.postgresql.org/docs/current/ltree.html) 列上的所有 GiST 索引进行重建索引 (https://www.postgresql.org/docs/current/sql-reindex.html)。
由全行变量(例如 tbl.*)在 SELECT 列表顶层之外产生的元组中的列名,现在始终与关联的命名复合类型的列名一致(如果存在的话)。如果您依赖之前的行为,发布说明 (https://www.postgresql.org/docs/release/) 中详细描述了变通方法。
修复了从 interval 类型提取纪元值时的错误舍入问题。
防止调用 pg_stat_get_replication_slot(NULL) 时出现的问题。
修复了 table_to_xmlschema() 中 timestamptz 和 timetz 类型的错误输出。
修复了影响异步远程查询的规划器问题相关的错误。
修复了当查询使用 SEARCH 或 CYCLE 功能并包含重复的公用表表达式(WITH)名称时的规划器失败。
修复了 ALTER FUNCTION 以支持在同一命令中同时更改函数的并行属性和 SET 变量列表。
修复了使用 CLUSTER 在前导键为表达式的索引上进行表行排序时的排序错误。
防止系统在排序 GiST 索引构建后不久崩溃时的数据丢失。
修复了删除分区索引时的死锁风险。
修复了 DROP TABLESPACE 和检查点之间的竞态条件,该竞态条件可能导致无法从表空间目录中删除所有已失效文件。
修复了 TRUNCATE 命令与检查点重叠后崩溃恢复中的潜在问题。
重新允许 _ 作为自定义配置参数名称的首字符。
修复了在备库提升期间缺少 WAL 续传记录时出现的 PANIC: xlog flush request is not satisfied 错误。
修复了热备冲突处理中的自死锁可能性。
确保当服务器接近 max_sync_workers_per_subscription 限制时,逻辑复制应用工作进程可以被重新启动。
禁止在 PL/Perl 函数编译期间执行 SPI 函数。
libpq 现在接受 root 拥有的 SSL 私钥文件,这与服务器自 9.6 版本以来使用的规则一致。
重新允许在 psql (https://www.postgresql.org/docs/current/app-psql.html)、pg_dump (https://www.postgresql.org/docs/current/app-pgdump.html) 和 pg_amcheck (https://www.postgresql.org/docs/current/app-pgamcheck.html) 中使用 database.schema.table 模式。
对 pageinspect (https://www.postgresql.org/docs/current/pageinspect.html) 进行了多项修复以提高整体稳定性。
当外部表上存在 BEFORE INSERT ... FOR EACH ROW 触发器时,禁用 postgres_fdw (https://www.postgresql.org/docs/current/postgres-fdw.html) 中的批量插入。
更新 JIT 代码以支持 LLVM 14。
本次更新还包含 tzdata 2022a 版本,涵盖巴勒斯坦的夏令时法律变更,以及智利和乌克兰的历史修正。
完整的变更列表请查看发布说明 (https://www.postgresql.org/docs/release/)。
升级
所有 PostgreSQL 更新版本都是累积性的。与其他小版本更新一样,用户无需转储和重新加载数据库或使用 pg_upgrade 来应用此更新版本;只需关闭 PostgreSQL 并更新其二进制文件即可。
但是,如果您在使用 ltree (https://www.postgresql.org/docs/current/ltree.html) 数据类型的列上有 GiST 索引,升级后需要对其进行重建索引 (https://www.postgresql.org/docs/current/sql-reindex.html)。
跳过了一个或多个更新版本的用户可能需要执行额外的更新后步骤;详情请参阅早期版本的发布说明。
更多详情请查看发布说明 (https://www.postgresql.org/docs/release/)。
相关链接
下载 (https://www.postgresql.org/download/)
发布说明 (https://www.postgresql.org/docs/release/)
安全 (https://www.postgresql.org/support/security/)
版本策略 (https://www.postgresql.org/support/versioning/)
在 Twitter 上关注 @postgresql (https://twitter.com/postgresql)