PostgreSQL 18 Beta 1发布,有哪些功能亮点?
PostgreSQL 全球开发组于 2025 年 5 月 8 日发布了第一个 PostgreSQL 18 Beta 版本,现已开放下载。虽然细节可能会有所改变,但是该版本包含了 PostgreSQL 18 最终正式版中所有新功能的预览。
以下是 PostgreSQL 18 引入的部分关键功能亮点。
性能优化
- 异步 I/O(AIO),通过全新的异步 I/O 子系统提升 I/O 吞吐量并隐藏延迟。Linux 系统可使用 io_uring,其他平台则提供基于“工作线程”的通用实现。当前支持顺序扫描、位图堆扫描和 VACUUM 操作的异步文件读取,测试显示性能提升达 2-3 倍。
- 查询优化,PostgreSQL 18 支持多列 B-Tree 索引 Skip Scan 优化,可以加速缺少前缀列“=”条件的查询;新版本还改进了对 WHERE 子句中 OR 或 IN (…) 条件的索引利用,提升查询性能;hash join 整体性能提升,merge join 支持增量排序。
- 并行索引构建,支持 GIN 索引的并行构建,通常用于 JSON 和全文搜索场景。
- 分区表与锁定优化,改进了分区表查询的修剪效率及连接支持,以及多表查询时的锁定开销,提升高并发场景性能。
- 文本处理优化,提升了文本数据的处理性能,包括 upper/lower 函数性能提升以及一个新的内置排序规则 PG_UNICODE_FAST。
版本升级
- 优化器统计信息保留,主版本升级后(例如 PostgreSQL 17 升级到 PostgreSQL 18),自动保留统计信息,无需手动执行 ANALYZE,缩短性能恢复时间。
- pg_upgrade 工具增强,支持并行检查(通过 --jobs 参数),加速包含大量表或序列的版本升级;新增 --swap 标志,通过交换目录而非复制或链接文件加速升级流程。
开发体验
- 虚拟生成列,PostgreSQL 18 版本的生成列(Generated Columns)默认支持“virtual”模式,只在执行查询时动态计算字段值,无需占用存储;另外,存储式生成列可以支持逻辑复制。
- RETURNING 子句扩展,INSERT、UPDATE、DELETE 和 MERGE 命令的 RETURNING 子句支持同时访问旧值(OLD)和新值(NEW)。
- UUIDv7,新增 uuidv7() 函数生成时间戳有序的 UUID,优化缓存策略;同时新增 uuidv4() 作为 gen_rand_uuid 的别名。
- 模式匹配增强,支持对非确定性排序规则的文本进行 LIKE 匹配,新增 CASEFOLD 函数用于大小写不敏感的匹配。
- 约束增强,主键和唯一约束支持“无重叠”的时间范围约束(WITHOUT OVERLAPS),外键支持 PERIOD 子句。
安全特性
- OAuth 认证,支持通过扩展实现 OAuth 2.0 认证机制。
- FIPS 模式与 TLS 1.3,新增 FIPS 模式验证与强制功能;支持通过 ssl_tls13_ciphers 配置 TLS 1.3 加密套件。
- SCRAM 默认认证,PostgreSQL 18 开始弃用 md5 密码认证,全面转向 SCRAM,未来版本将彻底移除 md5 认证;postgres_fdw 和 dblink 支持 SCRAM 透传认证访问远程 PostgreSQL 实例。
可观测性
- EXPLAIN 增强,EXPLAIN ANALYZE 自动显示缓冲区访问次数及索引查找次数;EXPLAIN ANALYZE VERBOSE 新增 CPU、WAL 及平均读取统计信息。
- 统计视图扩展,pg_stat_all_tables 新增表级 VACUUM 和分析耗时统计;新增连接级 I/O 和 WAL 使用统计;逻辑复制冲突信息记录至日志及 pg_stat_subscription_stats 视图。
其他亮点
- 默认启用数据校验和,PostgreSQL 18 开始的新集群默认启用数据校验和功能,可通过 initdb --no-data-checksums 禁用。
- 约束功能增强,外键和检查约束支持 NOT ENFORCED 以及 ENFORCED 属性;NOT NULL 约束支持自定义名称,更加符合 SQL 标准; 同时还支持 NOT VALID 和 NO INHERIT 子句,与继承功能一致。
- pg_createsubscriber,新增 --all 标志,支持一键为实例中所有数据库创建逻辑副本。
- 外部表定义,新增 CREATE FOREIGN TABLE … LIKE 命令,可以基于本地表定义创建外部表。
- PostgreSQL 协议,推出新版 PostgreSQL 3.2 版本总线协议,libpq 仍然使用 3.0 协议,客户端驱动增加了新协议支持。
更多特性
除了以上内容,PostgreSQL 18 还增加了大量的新功能和改进,完整的新特性列表可以参考官方的发行说明:
https://www.postgresql.org/docs/18/release-18.html
PostgreSQL 18 正式版计划将于 2025 年 9 月左右发布。