PostgreSQL 全球开发小组今天宣布发布 PostgreSQL 17,这是世界上最先进的开源数据库的最新版本。
PostgreSQL 17 基于数十年的开源开发,在改进其性能和可扩展性的同时,适应新兴的数据访问和存储模式。此 PostgreSQL 版本增加了整体性能的显著提升,包括对 vacuum 的内存管理实现进行了彻底的改造,优化了存储访问,改进了高并发工作负载,加快了批量加载和导出速度,并改进了索引的查询执行。PostgreSQL 17 具有使全新工作负载和关键系统受益的功能,例如使用 SQL/JSON JSON_TABLE
命令增强了开发人员的体验,以及增强了逻辑复制功能,简化了高可用性工作负载和主要版本升级的管理。
PostgreSQL 核心团队成员 Jonathan Katz 说:“PostgreSQL 17 突显了推动 PostgreSQL 开发的全球开源社区如何构建增强功能,以帮助用户在其数据库旅程的各个阶段。” “无论是改进大规模运营数据库,还是基于令人愉悦的开发人员体验构建的新功能,PostgreSQL 17 都将增强您的数据管理体验。”
PostgreSQL 是一种创新的数据管理系统,以其可靠性、健壮性和可扩展性而闻名,受益于全球开发人员社区 25 年以上的开源开发,已成为各种规模组织首选的开源关系数据库。
PostgreSQL 的 vacuum 进程对于健康运行至关重要,需要服务器实例资源来运行。PostgreSQL 17 为 vacuum 引入了一种新的内部内存结构,该结构消耗的内存减少了多达 20 倍。这提高了 vacuum 的速度,并且减少了共享资源的使用,从而为您的工作负载提供更多可用资源。
PostgreSQL 17 继续提高其 I/O 层的性能。由于对 预写式日志 (WAL) 处理的改进,高并发工作负载的写入吞吐量可能会提高多达 2 倍。此外,新的流式 I/O 接口加快了顺序扫描(从表中读取所有数据)的速度,以及 ANALYZE
更新规划器统计信息的速度。
PostgreSQL 17 还将其性能提升扩展到查询执行。PostgreSQL 17 改进了带有使用 B 树索引(PostgreSQL 中的默认索引方法)的 IN
子句的查询的性能。此外,BRIN 索引现在支持并行构建。PostgreSQL 17 包括对查询计划的几项改进,包括对 NOT NULL
约束的优化,以及对处理通用表表达式 (WITH
查询) 的改进。此版本添加了更多 SIMD(单指令/多数据)支持,以加速计算,包括使用 AVX-512 用于 bit_count
函数。
PostgreSQL 是第一个添加 JSON 支持(2012 年)的关系数据库,PostgreSQL 17 在其 SQL/JSON 标准的实现中进行了补充。JSON_TABLE
现在可在 PostgreSQL 17 中使用,使开发人员能够将 JSON 数据转换为标准 PostgreSQL 表。PostgreSQL 17 现在支持 SQL/JSON 构造函数 (JSON
、JSON_SCALAR
、JSON_SERIALIZE
) 和 查询函数 (JSON_EXISTS
、JSON_QUERY
、JSON_VALUE
),为开发人员提供了其他与 JSON 数据交互的方式。此版本添加了更多 jsonpath
表达式,重点是将 JSON 数据转换为本机 PostgreSQL 数据类型,包括数字、布尔、字符串和日期/时间类型。
PostgreSQL 17 为 MERGE
添加了更多功能,该功能用于条件更新,包括 RETURNING
子句和更新 视图的功能。此外,PostgreSQL 17 还具有批量加载和数据导出的新功能,包括在使用 COPY
命令导出大行时,性能最多提高 2 倍。当源编码和目标编码匹配时,COPY
性能也会得到改进,并且包含一个新选项 ON_ERROR
,即使存在插入错误,该选项也允许导入继续进行。
此版本扩展了管理分区中数据和分布在远程 PostgreSQL 实例中的数据的功能。PostgreSQL 17 支持在分区表上使用标识列和排除约束。PostgreSQL 外部数据包装器(postgres_fdw
)用于在远程 PostgreSQL 实例上执行查询,现在可以将 EXISTS
和 IN
子查询推送到远程服务器以进行更高效的处理。
PostgreSQL 17 还包括一个内置的、与平台无关的、不可变的排序规则提供程序,该提供程序保证是不可变的,并且提供与 C
排序规则相似的排序语义,除了使用 UTF-8
编码而不是 SQL_ASCII
。使用此新的排序规则提供程序可确保您的基于文本的查询返回相同的排序结果,无论您在何处运行 PostgreSQL。
逻辑复制用于在许多用例中实时流式传输数据。但是,在此版本之前,想要执行主要版本升级的用户必须删除 逻辑复制槽,这需要在升级后将数据重新同步到订阅者。从 PostgreSQL 17 的升级开始,用户无需删除逻辑复制槽,从而简化了使用逻辑复制时的升级过程。
PostgreSQL 17 现在包含逻辑复制的故障转移控制,使其在高可用性环境中部署时更具弹性。此外,PostgreSQL 17 引入了 pg_createsubscriber
命令行工具,用于将物理副本转换为新的逻辑副本。
PostgreSQL 17 进一步扩展了用户如何管理其数据库系统的整体生命周期。PostgreSQL 有一个新的 TLS 选项 sslnegotiation
,它允许用户在使用 ALPN 时执行直接 TLS 握手(在 ALPN 目录中注册为 postgresql
)。PostgreSQL 17 还添加了 pg_maintain
预定义角色,该角色允许用户执行维护操作。
PostgreSQL 中包含的备份实用程序 pg_basebackup
现在支持增量备份,并添加了 pg_combinebackup
实用程序来重建完整备份。此外,pg_dump
包含一个名为 --filter
的新选项,该选项允许您在生成转储文件时选择要包含的对象。
PostgreSQL 17 还包括对监视和分析功能的增强。EXPLAIN
现在显示本地 I/O 块读取和写入所花费的时间,并包括两个新选项:SERIALIZE
和 MEMORY
,用于查看网络传输的数据转换所花费的时间,以及使用了多少内存。PostgreSQL 17 现在报告索引的 vacuum 进度,并添加了 pg_wait_events
系统视图,当与 pg_stat_activity
结合使用时,可以更深入地了解活动会话等待的原因。
PostgreSQL 17 中添加了许多其他新功能和改进,这些功能也可能对您的用例有所帮助。请参阅发行说明,以获取新功能和更改功能的完整列表。
PostgreSQL 是世界上最先进的开源数据库,拥有由数千名用户、贡献者、公司和组织组成的全球社区。PostgreSQL 基于加州大学伯克利分校开始的 35 多年工程经验构建,并以无与伦比的开发速度继续发展。PostgreSQL 成熟的功能集不仅与顶级专有数据库系统相匹配,而且在高级数据库功能、可扩展性、安全性和稳定性方面超越了它们。