2025年9月25日: PostgreSQL 18 发布!

PostgreSQL 18 发布!

发布于 2025-09-25,作者:PostgreSQL 全球开发组
PostgreSQL 项目

今日,PostgreSQL 全球开发组宣布发布 PostgreSQL 18,这是全球最先进开源数据库的最新版本。本新闻稿的翻译版本可在 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。基准测试已显示在某些场景下性能提升高达 3 倍。

新的 io_method 设置允许您在 workerio_uring 等 AIO 方法之间切换,或者您也可以选择使用 sync 设置来维持当前 PostgreSQL 的行为。现在有更多参数需要考虑使用 AIO 进行调优,您可以在 文档中了解更多

更快的升级,更好的升级后性能

PostgreSQL 的一项关键功能是生成和存储 统计信息,这些统计信息有助于 PostgreSQL 选择最高效的查询计划。在 PostgreSQL 18 之前,这些统计信息在 主版本升级 时不会保留,这可能导致繁忙系统的查询性能显著下降,直到 ANALYZE 运行完成。PostgreSQL 18 引入了在主版本升级期间保留查询规划器统计信息的能力,这有助于升级后的集群在升级后更快地达到预期性能。

此外,执行主版本升级的实用程序 pg_upgrade 在 PostgreSQL 18 中包含多项增强功能,例如在数据库包含大量对象(如表和序列)时,升级速度更快。此版本还允许 pg_upgrade 根据 --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 引入了 虚拟生成列,它们在查询时计算值而不是存储它们。这是生成列的默认选项。此外,已存储的生成列现在可以进行逻辑复制。

此版本为 INSERTUPDATEDELETEMERGE 命令的 RETURNING 子句 添加了访问先前值 (OLD) 和当前值 (NEW) 的能力。PostgreSQL 18 还通过 uuidv7() 函数支持 UUIDv7 生成,允许您生成时间戳排序的随机 UUID,以支持更好的缓存策略。PostgreSQL 18 将 uuidv4() 作为 gen_random_uuid() 的别名。

PostgreSQL 18 为 PRIMARY KEYUNIQUE 约束添加了 时间范围约束(范围上的约束),使用 WITHOUT OVERLAPS 子句;为 FOREIGN KEY 约束添加了时间范围约束,使用 PERIOD 子句。

最后,PostgreSQL 18 使使用 CREATE FOREIGN TABLE ... LIKE 命令,通过本地表的定义更容易创建外部表的模式定义。

改进文本处理

PostgreSQL 18 通过多项新增强功能,使文本处理更加轻松快捷。此版本添加了 PG_UNICODE_FAST 排序规则,它为大小写转换提供完整的 Unicode 语义,同时有助于加速许多比较。这包括 upperlower 字符串比较函数,以及用于不区分大小写比较的新 casefold 函数。此外,PostgreSQL 18 现在支持对使用 不确定性排序规则 的文本进行 LIKE 比较,从而简化了执行更复杂模式匹配的方式。此版本还更改了 全文搜索,使其使用集群的默认排序规则提供程序,而不是始终使用 libc,这可能要求您在运行 pg_upgrade 后重新索引所有 全文搜索pg_trgm 索引。

身份验证和安全功能

PostgreSQL 18 引入了 oauth 身份验证,它允许用户通过 PostgreSQL 扩展支持的 OAuth 2.0 机制进行身份验证。此外,PostgreSQL 18 包括对 FIPS 模式 的验证,并添加了用于配置服务器端 TLS v1.3 密码套件的 ssl_tls13_ciphers 参数。

此版本弃用了 md5 密码身份验证,该身份验证将在未来的版本中移除。如果您需要基于密码的 PostgreSQL 身份验证,请使用 SCRAM 身份验证。PostgreSQL 18 还支持使用 postgres_fdwdblink 进行 SCRAM 传递身份验证,以身份验证到远程 PostgreSQL 实例。此外,pgcrypto 现在支持 SHA-2 加密用于密码哈希

复制

PostgreSQL 18 支持在日志和 pg_stat_subscription_stats 视图中报告逻辑复制写入冲突。此外,CREATE SUBSCRIPTION 现在默认使用并行流式传输来应用事务,这有助于提高性能。pg_createsubscriber 实用程序现在有一个 --all 标志,因此您可以使用一个命令为实例中的所有数据库创建逻辑副本。PostgreSQL 18 还允许您自动 删除空闲复制槽,以帮助防止在发布者上存储过多的预写日志文件。

维护和可观察性

PostgreSQL 18 通过在常规 vacuum 操作期间主动冻结更多页面来改进其 vacuum 策略,从而减少开销并有助于需要严格 vacuum 的情况。

PostgreSQL 18 为 EXPLAIN 添加了更多详细信息,该命令提供有关查询计划执行的信息,并且从此版本开始,它会自动显示执行 EXPLAIN ANALYZE 时访问了多少缓冲区(数据存储的基本单位)。此外,EXPLAIN ANALYZE 现在显示在索引扫描期间发生了多少索引查找,而 EXPLAIN ANALYZE VERBOSE 则包括 CPU、WAL 和平均读取统计信息。PostgreSQL 18 在 pg_stat_all_tables 中包含更多有关 vacuum 和相关操作所花费时间的信息,以及每个连接的 I/O 和 WAL 利用率的统计信息。

其他值得注意的变化

使用 PostgreSQL 18 initdb初始化的数据库现在默认启用页面校验和。这可能会影响从未启用校验和的集群升级,使用 pg_upgrade 时,您需要创建一个新的 PostgreSQL 18 集群并带有 --no-data-checksums 选项。

PostgreSQL 18 还引入了新版本的 PostgreSQL 线协议(3.2 版本),这是自 PostgreSQL 7.4(2003 年)以来的第一个新协议版本。libpq 默认仍使用 3.0 版本,而客户端(例如驱动程序、连接池、代理)将支持新协议版本。

附加功能

PostgreSQL 18 还添加了许多其他新功能和改进,这些功能也可能对您的用例有所帮助。请参阅 发行说明 以获取新功能和更改功能的完整列表。

关于 PostgreSQL

PostgreSQL 是全球最先进的开源数据库,拥有由成千上万的用户、贡献者、公司和组织组成的全球社区。自 40 多年前在加州大学伯克利分校起源以来,PostgreSQL 一直保持着无与伦比的发展步伐。PostgreSQL 成熟的功能集不仅可以与顶级专有数据库系统相媲美,而且在高级数据库功能、可扩展性、安全性和稳定性方面甚至超越了它们。

链接