2025年9月25日:PostgreSQL 18 正式发布!
PostgreSQL 项目今天(9月25日)PostgreSQL全球发展组 宣布发布PostgreSQL 18,世界上最先进的开源数据库的最新版本。
PostgreSQL 18 通过新的 I/O 子系统提升了所有规模工作负载的性能,该子系统在从存储读取数据时表现出高达 3 倍的性能提升,同时增加了可以使用索引的查询数量。此版本使主要版本的升级更加无缝,加快了升级速度,并减少了升级完成后达到预期性能所需的时间。开发人员也可以从 PostgreSQL 18 的功能中受益,包括在查询时计算值的虚拟生成列,以及提供更好的索引和读取性能的数据库友好型 uuidv7() 函数。PostgreSQL 18 支持 OAuth 2.0 认证,使与单点登录 (SSO) 系统的集成更加容易。
“全球开源社区的努力塑造了每一个PostgreSQL版本,并帮助实现用户数据所在的功能,”PostgreSQL核心团队成员Jonathan Katz说。“PostgreSQL 18基于该项目长期以来的可靠和强大的数据管理体验,同时继续扩展其可以支持的工作负载。”
PostgreSQL,一个以可靠性、鲁棒性和可扩展性著称的创新数据管理系统,受益于全球开发者社区近30年的开源开发,并已成为各种规模组织的首选开源关系型数据库。
介绍异步 I/O
PostgreSQL 之前依赖于操作系统读取预取机制来加速数据检索。然而,由于操作系统缺乏对数据库特定访问模式的了解,它们无法始终预测需要哪些数据,导致许多工作负载的性能不理想。
PostgreSQL 18 引入了一个新的异步 I/O (AIO) 子系统,旨在解决这一限制。AIO 使 PostgreSQL 能够并发地发出多个 I/O 请求,而不是按顺序等待每个请求完成。这扩展了现有的预读取并提高了整体吞吐量。PostgreSQL 18 支持的 AIO 操作包括顺序扫描、位图堆扫描和 vacuum。基准测试在某些情况下展示了高达 3 倍的性能提升。
新的io_method 设置允许您在AIO方法之间切换,包括worker和io_uring,或者您可以选择通过sync 设置保持当前的PostgreSQL行为。现在有更多参数需要考虑调整AIO,您可以在文档中了解更多。
更快的升级,更好的升级后性能
PostgreSQL 的一个关键功能是生成和存储 统计信息,这些信息帮助 PostgreSQL 选择最高效的查询计划。在 PostgreSQL 18 之前,这些 统计信息不会在主要版本升级时 Carry Over,这可能导致在繁忙的系统上 查询性能显著下降,直到ANALYZE 完成运行。PostgreSQL 18 引入了在主要版本升级时保持规划器 统计信息的能力,这有助于升级后的集群在升级后更快地达到预期性能。
此外,pg_upgrade,一个执行主要版本升级的工具,包含在PostgreSQL 18中的几个增强功能,例如当数据库包含许多对象(如表和序列)时升级速度更快。此版本还允许pg_upgrade根据--jobs标志的设置并行处理其检查,并添加了 --swap标志,该标志将交换升级目录而不是复制、克隆或链接文件。
查询和一般性能增强
PostgreSQL 18通过自动加速你的工作负载来进一步提升查询性能。此版本引入了在多列B树索引 上的“跳过扫描”查找,这提高了查询的执行时间,这些查询省略了=一个或多个前缀索引列上的条件。它还可以优化使用OR条件的查询WHERE,以使用索引,从而显著加快执行速度。此外,PostgreSQL 18还对如何计划和执行表连接进行了许多改进,从提升哈希连接的性能到允许合并连接使用增量排序。PostgreSQL 18还支持并行构建 GIN索引,连接B树和 BRIN索引以支持此功能。
此版本还基于PostgreSQL对硬件加速的支持,包括对ARM NEON和SVE CPU内联函数的支持popcount ,该函数被bit_count 和其他内部功能使用。
提升开发者体验
PostgreSQL 18 引入了虚拟生成列 ,这些列在查询时计算值而不是存储它们。现在这是生成列的默认选项。此外,存储的生成列现在可以进行逻辑复制。
此版本增加了在OLD命令中访问上一个(NEW)和当前(RETURNING)值的能力。 PostgreSQL 18还通过INSERT函数增加了UUIDv7生成的能力,让你生成按时间戳排序的随机UUID,以支持更好的缓存策略。UPDATEPostgreSQL 18包括DELETE作为MERGE的别名。uuidv7()uuidv4()gen_random_uuid()
PostgreSQL 18 增加了 时间约束 -- 范围约束 -- 用于 PRIMARY KEY 和 UNIQUE 约束 使用 WITHOUT OVERLAPS 子句,以及在 FOREIGN KEY 约束使用 PERIOD 子句。
最后,PostgreSQL 18 使得通过本地表定义来创建外部表定义变得更加容易,使用 CREATE FOREIGN TABLE ... LIKE 命令。
改进的文本处理
PostgreSQL 18 通过一些新的增强功能使文本处理更简单、更快速。此版本增加了PG_UNICODE_FAST 排序,它为大小写转换提供了完整的 Unicode 语义,同时帮助加速许多比较。这包括upper和lower 字符串比较函数以及新的casefold 不区分大小写的比较函数。此外,PostgreSQL 18 现在支持对使用LIKE排序的文本进行 非确定性排序的比较,简化了如何执行更复杂的模式匹配。此版本还更改了全文搜索 ,使其使用集群的默认排序提供程序,而不是总是使用 libc,这可能需要您重新索引所有 全文搜索 。pg_trgm 运行后的索引pg_upgrade.
认证和安全功能
PostgreSQL 18 引入了 oauth身份验证, 使用户可以使用通过 PostgreSQL 扩展支持的 OAuth 2.0 机制进行身份验证。此外,PostgreSQL 18 包括对 FIPS 模式的验证,并添加了用于配置服务器端 TLS v1.3 加密套件的 ssl_tls13_ciphers 参数。
此版本弃用了md5密码认证,该认证将在未来的版本中被移除。如果你需要PostgreSQL基于密码的认证,请使用 SCRAM认证。 PostgreSQL 18还支持SCRAM透传认证,通过 postgres_fdw和 dblink对远程PostgreSQL实例进行认证。此外,pgcrypto 现在支持SHA-2加密用于密码哈希。
复制
PostgreSQL 18 支持在日志和pg_stat_subscription_stats视图中报告逻辑复制写冲突。此外, CREATE SUBSCRIPTION 现在默认使用并行流来应用事务,这可以帮助提高性能。 pg_createsubscriber 工具现在有一个--all标志,这样你就可以用一个命令为实例中的所有数据库创建逻辑副本。PostgreSQL 18 还允许你自动删除空闲的复制槽,以帮助防止在发布者上存储过多的写前日志文件。
维护和可观测性
PostgreSQL 18通过在常规真空操作期间主动冻结更多页面来改进其真空 策略,减少了开销,并在需要激进真空操作的情况下提供了帮助。
PostgreSQL 18增加了更多关于查询计划执行的细节EXPLAIN,该信息提供了关于查询计划执行的信息,并且在此版本中 现在自动显示在执行时访问的缓冲区(数据存储的基本单位)的数量EXPLAIN ANALYZE。此外,EXPLAIN ANALYZE 现在显示在索引扫描期间进行的索引查找次数,以及EXPLAIN ANALYZE VERBOSE 包含CPU、WAL和平均读取统计数据。PostgreSQL 18在pg_stat_all_tables 中包含更多关于真空和相关操作所花费时间的信息,以及每个连接的I/O和WAL利用率的统计数据。
其他重要更改
数据库已使用PostgreSQL 18初始化initdb 现在默认启用页面校验和。这可能会影响从非校验和启用的集群进行升级,这将要求您在使用--no-data-checksums选项时创建一个新的PostgreSQL 18集群 pg_upgrade。
PostgreSQL 18 还引入了PostgreSQL线协议的新版本(3.2),这是自PostgreSQL 7.4(2003年)以来的第一个新协议版本。 libpq 仍然默认使用版本3.0,而客户端(例如,驱动程序、连接池、代理)将添加对新协议版本的支持。
附加功能
PostgreSQL 18 中添加了许多其他的新功能和改进,这些功能和改进可能对您的用例也有帮助。请参阅 发行说明,以获取新功能和更改功能的完整列表。
关于PostgreSQL
PostgreSQL是世界上最先进的开源数据库,拥有全球数千名用户、贡献者、公司和组织的社区。自40多年前在加州大学伯克利分校诞生以来,PostgreSQL一直以无与伦比的发展速度前行。PostgreSQL成熟的功能集不仅与顶级的商业数据库系统相当,而且在高级数据库功能、可扩展性、安全性和稳定性方面超越了它们。
来源:PostgreSQL 全球开发组 百度智能翻译