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