PostgreSQL 17 现已发布。公告称“这是世界上最先进的开源数据库的最新版本。”

PostgreSQL 17 在适应新兴数据访问和存储模式的同时,提高了性能和可扩展性显著提高了整体性能,包括彻底改进的 vacuum 内存管理实现、存储访问优化和高并发工作负载改进、批量加载和导出加速以及索引查询执行改进。PostgreSQL 17 具有使全新工作负载和关键系统都受益的功能,例如,增加了使用 SQL/JSONJSON_TABLE 命令的开发人员体验,增强了逻辑复制从而简化了高可用性工作负载和主要版本升级的管理。

PostgreSQL 核心团队成员 Jonathan Katz 表示:“PostgreSQL 17 凸显了推动 PostgreSQL 发展的全球开源社区如何构建增强功能,帮助用户完成数据库之旅的各个阶段。无论是大规模操作数据库的改进,还是建立在令人愉悦的开发人员体验基础上的新功能,PostgreSQL 17 都将增强您的数据管理体验。”

PostgreSQL 17 发布插图

系统范围的性能提升

PostgreSQL 的 vacuum 进程对于系统健康运行至关重要,需要服务器实例资源才能运行。PostgreSQL 17 引入了一种新的 vacuum 内部内存结构,可减少高达 20 倍的内存消耗。提高了 vacuum 的速度,还减少了共享资源的占用,为工作负载释放了更多资源。

PostgreSQL 17 继续改进了 I/O 层的性能。由于对预写日志(WAL)处理的改进,高并发工作负载的 写入吞吐量可能提升至 2 倍。此外,新的流式 I/O 接口加快了顺序扫描(读取表中所有数据)以及 ANALYZE 更新查询计划统计信息的速度。

PostgreSQL 17 还提升了查询执行方面的性能。对于使用 B-tree 索引(PostgreSQL 默认的索引方法)的 IN 子句查询,性能有所提高。此外,BRIN 索引现在支持并行构建。PostgreSQL 17 在包括多项查询规划改进:对 NOT NULL 约束的优化,以及对通用表表达式(WITH 查询)处理的改进。该版本还为加速计算添加了更多 SIMD(单指令多数据)支持,包括在 bit_count 函数中使用 AVX-512。

进一步扩展强大的开发人员体验

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 实例上执行查询的 PostgreSQL 外部数据包装器(postgres_fdw)现在可以将 EXISTS 和 IN 子查询下推到远程服务器,以实现更高效的处理。

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 块读取和写入所花费的时间,并包含两个新选项:SERIALIZE 和 MEMORY,可用于查看网络传输数据转换所花费的时间以及内存使用量。PostgreSQL 17 现在可以报告索引清理的进度,并添加了 pg_wait_events 系统视图,与 pg_stat_activity 结合使用时,可以更深入地了解活动会话的等待原因。


更多其他新功能和改进可参阅发行说明

免责声明:本文系转载,版权归原作者所有;旨在传递信息,不代表一休教程网的观点和立场。