PostgreSQL 18 发布

软件资讯 软件资讯 发布于 18小时前 0 浏览 0 回复

PostgreSQL 全球开发组宣布最新版本 PostgreSQL 18 正式发布

PostgreSQL 18通过全新的I/O 子系统提升了各种规模工作负载的性能,在从存储读取数据时实现了高达3 倍的性能提升,并增加了可使用索引的查询数量。该版本降低了主版本升级的影响,加速了升级速度,并缩短了升级完成后达到预期性能所需的时间。开发者也能从 PostgreSQL 18的功能中获益,包括可在查询时动态计算值的虚拟生成列,以及提升数据库易用性并能为UUID提供更优索引和读取性能的 uuidv7() 函数。PostgreSQL 18 支持OAuth 2.0 身份验证,使其更易于与单点登录(SSO)系统集成。

PostgreSQL核心团队成员Jonathan Katz 表示,“全球开源社区的共同努力铸就了每一次PostgreSQL 版本的发布,并持续带来符合用户数据场景的功能。PostgreSQL 18 延续了该项目长久以来提供可靠、稳健数据管理体验的深厚传统,并进一步扩展了其可支持的工作负载范围。”

PostgreSQL是一个创新的数据管理系统,以其可靠性和健壮性著称,得益于全球开发者社区近30年的开源开发,已经成为各种规模组织的首选开源关系型数据库。

异步I/O 简介

PostgreSQL此前依赖操作系统的预读机制来加速数据检索。然而,操作系统无法感知数据库特有的访问模式,难以准确预测所需数据,导致在许多工作负载场景下性能欠佳。

PostgreSQL 18引入了新的异步I/O (AIO) 子系统来解决这一局限。AIO 允许PostgreSQL 并发地发出多个I/O 请求,而不是等待每个请求顺序完成,从而增强了现有的预读能力并提高整体吞吐量。PostgreSQL 18 支持的AIO 操作包括顺序扫描、位图堆扫描和清理(VACUUM)。基准测试显示,在某些场景下性能提升高达倍。

新的io_method参数允许用户在 worker  io_uring AIO 方法之间切换,也可以通过设置 sync 参数保持PostgreSQL 现有行为。AIO 带来了更丰富的调优维度,详细配置请参考官方文档

升级提速且性能跃升

PostgreSQL的一项关键特性是生成并存储统计信息,有助于PostgreSQL 选择最优的查询计划。在PostgreSQL 18 之前,这些统计信息无法在主版本升级过程中保留,导致高负载系统在ANALYZE完成前查询性能骤降。PostgreSQL 18 引入了在主版本升级时保留规划器统计信息的能力,这有助于升级后的集群更快地达到预期性能。

此外,主版本升级工具pg_upgradePostgreSQL 18 中迎来多项增强,例如当数据库包含大量表和序列等对象时,升级速度显著提升。此版本还支持通过 --jobs 参数配置并行检查,并新增了 --swap 参数,通过直接交换升级目录的方式替代原有的复制、克隆或链接文件操作。

查询与整体性能提升

PostgreSQL 18通过一系列能自动提升工作负载速度的功能,进一步提升了查询性能。此版本引入了对多列 B-tree 索引上的“跳跃扫描”查找,可缩短在查询中省略一个或多个前缀索引列等值(=)条件时的执行时间。它还可以优化 WHERE 子句中使用 OR 条件的查询,使其有效利用索引,大幅提升执行速度。此外,PostgreSQL 对表连接的执行计划和处理进行了多项改进,包括提升哈希连接性能、允许合并连接使用增量排序等。PostgreSQL 18 还支持GIN 索引的并行构建,与B-tree BRIN 索引索引一样具备该能力。

该版本还进一步增强了PostgreSQL 对硬件加速的支持,包括为 popcount 函数添加对ARM NEON SVE CPU 内置指令集的支持,该函数被bit_count和其他内部功能使用。

提升开发者体验

PostgreSQL 18引入了虚拟生成列,其数值在查询时实时计算而非直接存储,现已成为生成列的默认选项。此外,存储型生成列现已支持逻辑复制。

该版本新增了在RETURNING 子句中同时访问修改前(OLD)与当前(NEW)数值的能力,适用于 INSERTUPDATEDELETE  MERGE 命令。PostgreSQL 18 还通过uuidv7()函数新增了UUIDv7 生成功能,可生成按时间戳排序的随机UUID,有助于优化缓存策略。uuidv4()也作为 gen_random_uuid() 的别名被引入到PostgreSQL 18 

PostgreSQL 18新增了对时间范围约束的支持:通过 WITHOUT OVERLAPS 子句,可在主键(PRIMARY KEY)和唯一(UNIQUE)约束中定义不重叠的范围;通过PERIOD 子句,可为外键(FOREIGN KEY)约束定义时间区间关系。

最后,PostgreSQL 18引入了CREATE FOREIGN TABLE ... LIKE命令,可依据本地表的定义更便捷地创建外部表的模式结构。

文本处理增强

PostgreSQL 18通过多项新特性使文本处理更简单、更快速。此版本新增了PG_UNICODE_FAST排序规则,该规则在提供完整的Unicode大小写转换语义的同时,显著提升了多种比较操作的性能,涵盖 upper  lower 字符串比较函数,以及用于大小写不敏感比较的新casefold函数。此外,PostgreSQL 18 现在支持对使用非确定性排序规则的文本进行 LIKE 比较,简化了复杂模式匹配的实现。本版本还调整了全文检索的实现机制,使其采用数据库集群的默认排序提供程序,而非始终依赖libc,这一变化可能导致在运行pg_upgrade后,需要为所有全文检索pg_trgm索引执行重建操作。

复制

PostgreSQL 18支持在日志和pg_stat_subscription_stats视图中报告逻辑复制写入冲突。此外,CREATE SUBSCRIPTION现默认使用并行流式方式来应用事务,有助于提升复制性能。pg_createsubscriber工具新增了 --all 参数,可以通过一条命令为实例中的所有数据库创建逻辑副本。PostgreSQL 18 持自动删除空闲复制槽,避免在发布服务器上积压过多WAL日志。

维护与可观测性

PostgreSQL 18改进了vacuum策略,通过在常规vacuum 期间主动冻结更多页面来减少开销,并在需要激进清理的情况下提供了帮助。

PostgreSQL 18EXPLAIN命令提供了更详细的执行信息,自此版本起,在执行 EXPLAIN ANALYZE 时会自动显示访问的缓冲区数量(数据存储的基本单位)。此外,EXPLAIN ANALYZE 现在会显示索引扫描期间发生的索引查找次数,而 EXPLAIN ANALYZE VERBOSE 则会包含CPUWAL 和平均读取统计信息。PostgreSQL 18 还在pg_stat_all_tables视图增加了有关VACUUM 及相关操作耗时统计,以及按连接统计的I/O WAL 使用情况数据。

其他重要变更

通过PostgreSQL 18 initdb初始化的数据库, 现在默认启用页校验和(page checksums)。这会影响从未启用校验和的集群升级,在使用pg_upgrade时需要使用 --no-data-checksums 参数创建一个新的PostgreSQL 18 集群。

PostgreSQL 18推出了新版(3.2)的PostgreSQL通信协议,这是自2003PostgreSQL 7.4发布以来的首个重大更新。目前,libpq库仍默认使用3.0版本协议,而客户端工具(如驱动程序、连接池、代理服务器等)将逐步增加对新协议版本的支持。

其他功能

PostgreSQL 18还新增了许多其他新功能和改进,这些可能对您的使用场景有所帮助。请查看发布说明,以获取完整的新功能和更改列表。



为您推荐相关文章:

  • PostgreSQL 15.3、14.8、13.11、12.15 和 11.20 发布
  • PostgreSQL 16 发布首个 Beta 版本
  • PostgreSQL 15.4、14.9、13.12、12.16、11.21 和 16 Beta 3 发布
  • PostgreSQL 17 Beta 1
  • PostgreSQL 16 Beta 2 发布
  • 同类文章推荐:

  • 官方推荐的 Redis 客户端 Redisson 3.52.0 发布
  • DBeaver 25.2.1 发布
  • IntelliJ IDEA 2025.2.2 发布
  • FileZilla Server 1.11.1 发布
  • Elasticsearch 9.1.4 发布
  • Firefox 143.0 发布