2025年9月25日: PostgreSQL 18 发布!

PostgreSQL 17 发布!

发布于 2024-09-26,作者:PostgreSQL 全球开发组
PostgreSQL 项目

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-tree 索引(PostgreSQL 中的默认索引方法)的 IN 子句的查询性能。此外,BRIN 索引现在支持并行构建。PostgreSQL 17 包含多项查询规划改进,包括对 NOT NULL 约束的优化,以及对公共表表达式(WITH 查询)处理的改进。此版本增加了对 SIMD(单指令多数据)的支持,以加速计算,包括使用 AVX-512 来加速 bit_count 函数。

健壮的开发体验进一步扩展

PostgreSQL 是第一个添加 JSON 支持(2012 年)的关系型数据库,PostgreSQL 17 进一步增强了其对 SQL/JSON 标准的实现。PostgreSQL 17 现在支持 JSON_TABLE,允许开发人员将 JSON 数据转换为标准的 PostgreSQL 表。PostgreSQL 17 现在支持 SQL/JSON 构造函数(JSONJSON_SCALARJSON_SERIALIZE)和查询函数(JSON_EXISTSJSON_QUERYJSON_VALUE),为开发人员提供了更多与 JSON 数据交互的方式。此版本增加了更多的 jsonpath 表达式,并侧重于将 JSON 数据转换为 PostgreSQL 的原生数据类型,包括数值、布尔、字符串和日期/时间类型。

PostgreSQL 17 为 MERGE 语句(用于条件更新)添加了更多功能,包括 RETURNING 子句以及更新视图的能力。此外,PostgreSQL 17 在批量加载和数据导出方面拥有了新的功能,包括使用 COPY 命令导出大型行时性能最多可提高 2 倍。当源编码和目标编码匹配时,COPY 的性能也有所提升,并且增加了一个新的选项 ON_ERROR,允许导入在遇到插入错误时继续进行。

此版本扩展了管理分区数据和分布式在远程 PostgreSQL 实例中的数据的功能。PostgreSQL 17 支持在分区表上使用标识列和排他约束。PostgreSQL 外部数据包装器(postgres_fdw),用于在远程 PostgreSQL 实例上执行查询,现在可以将 EXISTSIN 子查询推送到远程服务器进行更高效的处理。

PostgreSQL 17 还包含一个内置的、平台无关的、不可变的排序提供程序,该提供程序保证不可变,并提供与 C 排序类似的排序语义,但使用 UTF-8 编码而不是 SQL_ASCII。使用这个新的排序提供程序可以确保您的文本查询在任何运行 PostgreSQL 的地方都能返回相同的排序结果。

用于高可用性和主版本升级的逻辑复制增强

逻辑复制 可用于跨多种用例进行实时数据流传输。然而,在此版本之前,希望执行主版本升级的用户必须删除逻辑复制槽,这需要在升级后重新同步数据到订阅者。从 PostgreSQL 17 开始升级,用户无需删除逻辑复制槽,从而简化了使用逻辑复制时的升级过程。

PostgreSQL 17 现在包含了逻辑复制的故障转移控制,使其在高可用环境中部署时更具弹性。此外,PostgreSQL 17 引入了 pg_createsubscriber 命令行工具,用于将物理副本转换为新的逻辑副本。

管理安全和操作的更多选项

PostgreSQL 17 进一步扩展了用户管理数据库系统整体生命周期的能力。PostgreSQL 有一个新的 TLS 选项 sslnegotiation,允许用户在使用 ALPN(在 ALPN 目录中注册为 postgresql)时执行直接 TLS 握手。PostgreSQL 17 还增加了 pg_maintain 预定义角色,该角色授予用户执行维护操作的权限。

PostgreSQL 包含的备份实用程序 pg_basebackup 现在支持增量备份,并增加了 pg_combinebackup 实用程序来重建完整备份。此外,pg_dump 包含了一个名为 --filter 的新选项,允许您在生成转储文件时选择要包含的对象。

PostgreSQL 17 还包含对监控和分析功能的增强。EXPLAIN 现在显示本地 I/O 块读写所花费的时间,并包含两个新选项:SERIALIZEMEMORY,分别用于查看数据转换用于网络传输所花费的时间以及使用了多少内存。PostgreSQL 17 现在报告索引 VACUUM 的进度,并添加了 pg_wait_events 系统视图,该视图与 pg_stat_activity 结合使用时,可以更深入地了解活动会话等待的原因。

附加功能

PostgreSQL 17 还添加了许多其他新功能和改进,可能对您的用例也有帮助。请参阅发行说明以获取新功能和更改功能的完整列表。

关于 PostgreSQL

PostgreSQL 是世界上最先进的开源数据库,拥有由数千名用户、贡献者、公司和组织组成的全球社区。PostgreSQL 建立在加州大学伯克利分校 35 年多的工程开发基础上,并以无与伦比的发展速度持续进步。PostgreSQL 成熟的功能集不仅可以与顶级专有数据库系统相媲美,而且在高级数据库功能、可扩展性、安全性和稳定性方面还超越了它们。

链接