在距离上一个重要版本发布一年后,PostgreSQL 全球开发组宣布发布 PostgreSQL 17,这是世界上最先进的开源数据库的最新版本,带来了在性能、可扩展性和适应新兴数据存储与访问模式方面的增强。
PostgreSQL 17 亮点
在发布公告中,PostgreSQL 核心团队成员 Jonathan Katz 表示:
“PostgreSQL 17 展示了全球开源社区如何推动 PostgreSQL 的发展,构建出帮助用户在数据库旅程中各个阶段的增强功能。无论是对大规模数据库操作的改进,还是为开发者提供更好的体验,PostgreSQL 17 都将提升你的数据管理体验。”
系统性能提升
PostgreSQL 17 的一大亮点是对真空处理过程的内存管理进行了彻底改进。这个关键操作现在消耗的内存最多可减少 20 倍,从而加快了真空处理速度,减少了对共享资源的使用,留出更多资源供其他工作负载使用。
此外,新版本在 I/O 层面也有改进。通过对预写日志 (WAL) 处理的优化,高并发工作负载的写入吞吐量最高可提升两倍。
新增的流式 I/O 接口加快了顺序扫描的速度,并在更新计划器统计数据时加速了 ANALYZE
命令的执行。
在查询执行方面,PostgreSQL 17 提升了使用 IN
子句和 B 树索引(默认索引方法)时的查询性能。BRIN 索引现在支持并行构建,此外还对查询计划进行了多项优化,包括对非空约束的优化处理以及对常用表表达式的更好处理。
新版本还引入了更多的 SIMD(单指令多数据)支持,利用 AVX-512 加速了诸如 bit_count
等函数。
更好的开发者体验
PostgreSQL 在 JSON 支持方面继续领先,新增了 SQL/JSON 的 JSON_TABLE
命令,允许开发者将 JSON 数据转换为标准 PostgreSQL 表。
新版本还支持 SQL/JSON 构造函数和查询函数,例如 JSON_EXISTS
、JSON_QUERY
和 JSON_VALUE
,提供了更多与 JSON 数据交互的方式。同时,还新增了更多的 jsonpath
表达式,以便更方便地将 JSON 数据转换为 PostgreSQL 原生数据类型。
用于条件更新的 MERGE
命令现在支持 RETURNING
子句,并且可以更新视图。在批量加载和数据导出方面也进行了优化,使用 COPY
命令导出大行数据的速度最多可提升两倍。COPY
命令还新增了 ON_ERROR
选项,允许在插入错误发生时继续导入。
此外,PostgreSQL 17 扩展了对分区数据和跨远程实例分布式数据的管理功能。分区表现在支持标识列和排他约束。postgres_fdw
外部数据封装器可以将 EXISTS
和 IN
子查询推送到远程服务器,以提高处理效率。
新版本还包括了一个内置的、平台无关的不可变排序提供程序。该功能确保了不同平台上的文本排序结果一致性,提供了类似 C 排序但使用 UTF-8 编码的排序语义。
逻辑复制增强
对于使用逻辑复制的用户来说,PostgreSQL 17 简化了主版本升级过程,无需再删除逻辑复制槽。这一改进减少了停机时间,并避免了升级后的数据重新同步需求。
新版本还引入了逻辑复制的故障转移控制,增强了高可用性环境下的弹性能力。一个新的命令行工具 pg_createsubscriber
帮助将物理副本转换为新的逻辑副本。
安全性与运维改进
在安全性和运维管理方面也有多项进展。新增的 TLS 选项 sslnegotiation
允许通过应用层协议协商 (ALPN) 进行直接的 TLS 握手。预定义角色 pg_maintain
已加入,允许用户执行维护操作。
备份工具也得到了重大更新。pg_basebackup
现在支持增量备份,而新的 pg_combinebackup
工具可以从增量备份中重建完整备份。pg_dump
工具新增了 --filter
选项,允许在生成转储文件时选择特定对象。
监控和分析功能也得到了增强。EXPLAIN
命令现在显示了本地 I/O 块读取和写入所花费的时间,并新增了两个选项:SERIALIZE
和 MEMORY
,这些选项对于分析数据转换时间和内存使用情况非常有用。
新版本还报告了索引真空处理的进度,并新增了 pg_wait_events
系统视图,以便更好地了解会话等待情况。
当然,PostgreSQL 17 还有许多其他令人兴奋的新功能和改进。你可以访问官方公告查看详细内容,或者阅读发布说明了解所有更新细节。
PostgreSQL 17 的完整文档已提供 HTML 和 man 页格式,还可以在线浏览 HTML 和 PDF 格式的文档。