2024年9月26日,PGDG正式发布了第一个PostgreSQL 17 GA版本。
PostgreSQL 17建立在数十年的开源开发基础上,不断改进其性能和可扩展性,以满足关键数据存储。新版本的PostgreSQL提供了显著的整体性能提升,包括彻底改进的内存管理Vacuum的实现、存储访问的优化和 高并发工作负载改进、批量加载和导出以及查询索引的加速。
PostgreSQL 17 提供了全新的工作负载和关键系统功能,例如方便开发人员使用 的SQL/JSON命令,简化高可用性工作负载时的逻辑复制管理,以及主要版本升级等。
系统范围的性能提升
PostgreSQL vacuum进程对于正常运行至关重要,需要消耗服务器实例资源进行操作。PostgreSQL 17引入了一种新的vacuum内部内存结构使得消耗的内存减少了20倍。这以改进提高了vacuum速度并且减少了共享资源的占用,能够支持更多的工作负载。
PostgreSQL 17继续提高I/O性能。预写日志 (WAL) 处理方式的改进高 使得并发工作负载的写入吞吐量可以提高2倍。此外,新的流式I/O接口可加快顺序扫描速度以及ANALYZ更新统计信息的速度。
PostgreSQL 17还提升了查询的性能。PostgreSQL 17提高了使用B-树索的查询性能。此外,BRIN索引现在支持并行创建。PostgreSQL 17包括对查询计划的一些改进, 包括对约束和公共表表达式(WITH查询)的优化。该版本增加了更多加速计算的SIMD(单指令/多数据)指令 ,包括使用AVX-512实现bit_count函数。
进一步改善开发人员体验
PostgreSQL是第一个添加JSON支持的关系数据库(始于2012年)。PostgreSQL 17增加了SQL/JSO 标准的实现。JSON_TABLE允许开发人员将JSON数据转换为标准表。PostgreSQL 17 现在支持 SQL/JSON 构造函数和查询函数,为开发人员提供了与JSON数据交互的另一种方式。该版本新增更多jsonpath表达式,重点是将JSON数据转换为原生PostgreSQL数据类型, 包括numeric、boolean、string 和date/time 类型。
PostgreSQL 17还为MERGE语句添加了更多功能, 用于条件更新,以及视图的更新。此外,PostgreSQL 17还具有批量加载和导出数据的功能 ,包括使用COPY命令导出大量数据行时性能提升高达2倍。
新此版本提供了用于管理分区中的数据远程PostgreSQL实例数据的功能。PostgreSQL 17支持分区表使用标识列和排除约束。PostgreSQL外部数据包装器(postgres_fdw)可以将子查询推送到远程服务器以实现更高效的处理。
PostgreSQL 17还包括一个内置的、独立于平台的、不可变的排序规则程序。
逻辑复制增强功能
逻辑复制用于在许多场景中实现实时流式传输数据。但是在PostgreSQL 17版本之前想要执行主要版本升级的用户必须删除逻辑复制槽,从而导致在升级后需要重新同步数据。从PostgreSQL 17版本开始,用户升级时不必删除逻辑复制槽,从而简化了升级流程。
PostgreSQL 17现在包括用于逻辑复制的故障转移控制,使得在高可用性环境中部署时更具弹性。
此外PostgreSQL 17还引入了pg_createsubscriber命令行工具,用于将物理副本转换为新的逻辑副本。
安全性和操作性的更多选项
PostgreSQL 17进一步扩展了用户管理数据库系统的功能。PostgreSQL 有一个新的TLS选项 ,允许用户在使用ALPN时执行直接TLS握手。
PostgreSQL 17还添加了预定义角色pg_maintain,它可以授予用户执行维护操作的权限。
PostgreSQL 备份程序pg_basebackup现在支持增量备份,同时增加了pg_combinebackup程序重建完整备份。此外,pg_dump还包括一个新的选项--filter,用于选择在备份文件中包含哪些对象。
PostgreSQL 17 还包括对监控和分析功能的增强。EXPLAIN现在可以显示 本地I/O块读取和写入所花费的时间,并且可以查看进行网络传输所执行的数据转换消耗的时间和内存。PostgreSQL 17可以显示清理索引的进度, 并增加了pg_wait_events 系统视图,可以与 pg_stat_activity视图结合使用,从而 更深入地了解活动会话等待的原因。
其他功能
PostgreSQL 17增加了许多其他新功能和改进,具体可以参考发行说明。
https://www.postgresql.org/docs/17/release-17.html