PostgreSQL 18 正式发布!

PostgreSQL全球开发组今日宣布推出PostgreSQL 18,这是全球最先进的开源数据库的最新版本。本新闻稿的翻译版本可在PostgreSQL 18新闻资料包中获取。

PostgreSQL 18通过全新I/O子系统提升了各类规模工作负载的性能,其从存储设备读取数据时性能最高可提升3倍,同时扩大了可使用索引的查询范围。本次发布显著降低了主版本升级的干扰性,不仅加速升级过程,更缩短了升级后达到预期性能所需的时间。开发者同样受益于 PostgreSQL 18 的新特性,包括在查询时计算值的虚拟生成列,以及数据库友好的 uuidv7() 函数——该函数为 UUID 提供了更优的索引和读取性能。PostgreSQL 18 通过支持 OAuth 2.0 认证,简化了与单点登录(SSO)系统的集成。

元素周期表

PostgreSQL核心团队成员乔纳森·卡茨表示:“全球开源社区的努力塑造着每个PostgreSQL版本的发布,助力实现满足用户数据所在位置需求的特性。PostgreSQL 18在项目悠久而丰富的可靠、稳健数据管理经验基础上持续发展,同时不断扩展其支持的工作负载。”

PostgreSQL作为以可靠性、稳健性和可扩展性著称的创新数据管理系统,受益于全球开发者社区近30年的开源开发,已成为各类规模组织的首选开源关系型数据库。

异步I/O功能亮相

PostgreSQL此前依赖操作系统的预读机制加速数据检索。但由于操作系统无法洞悉数据库特有的访问模式,其预判数据需求的能力存在局限,导致许多工作负载的性能未能达到最优。

PostgreSQL 18为此引入全新异步I/O(AIO)子系统。AIO使PostgreSQL能够并发发出多个I/O请求,而非顺序等待每个请求完成。这不仅扩展了现有预读功能,更显著提升了整体吞吐量。PostgreSQL 18支持的AIO操作包括顺序扫描、位图堆扫描及vacuum操作。基准测试表明,在特定场景下性能提升可达3倍。

新的io_method设置允许您在AIO方法之间切换,包括workerio_uring,或者您可以选择使用sync设置保持当前PostgreSQL的行为。现在有更多参数可用于调整AIO性能,您可在文档中了解更多详情

更快的升级速度,更优的升级后性能

PostgreSQL 的核心特性之一是生成和存储统计信息,这些信息有助于 PostgreSQL 选择最高效的查询计划。在 PostgreSQL 18 之前,这些统计数据无法在主要版本升级中保留,导致繁忙系统在完成ANALYZE运行前可能出现显著的查询性能下降。PostgreSQL 18 引入了在主要版本升级后保留规划器统计信息的功能,这有助于升级后的集群在升级后更快地达到预期性能。

此外,用于执行主要版本升级的实用程序pg_upgrade在PostgreSQL 18中包含多项增强功能,例如当数据库包含大量对象(如表和序列)时可实现更快的升级速度。本次发布还允许pg_upgrade根据--jobs参数设置并行处理检查任务,并新增--swap参数——该参数通过交换升级目录实现文件迁移,替代了传统的复制、克隆或链接操作。

查询与整体性能优化

PostgreSQL 18通过自动加速工作负载的功能进一步提升查询性能。本次发布在多列B树索引上引入“跳过扫描”查找机制,可优化省略一个或多个前缀索引列=条件的查询执行时间。该机制还能优化使用WHERE子句中OR条件的查询,使其能利用索引显著提升执行速度。此外,PostgreSQL 在表连接的计划与执行方面也进行了多项改进:从提升哈希连接性能,到允许合并连接使用增量排序。PostgreSQL 18 还支持GIN索引的并行构建,使B-树索引与BRIN索引共同具备此功能。
PostgreSQL 18 还支持并行构建GIN索引,B-树和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 将 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_trgm 索引。

认证与安全特性

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

本次发布已弃用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命令并添加--no-data-checksums选项创建新的PostgreSQL 18集群。

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

附加功能

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

关于 PostgreSQL

PostgreSQL 是全球最先进的开源数据库,拥有由数千名用户、贡献者、企业及组织构成的国际化社区。自四十多年前诞生于加州大学伯克利分校以来,PostgreSQL 始终保持着无与伦比的发展速度。PostgreSQL成熟的功能集不仅可与顶级专有数据库系统比肩,更在高级数据库特性、可扩展性、安全性及稳定性方面超越后者。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注


京ICP备12002735号