PostgreSQL 17 Beta 1发布,有没有你期待的新功能?

PostgreSQL 全球开发组于 2024 年 5 月 23 日发布了第一个 PostgreSQL 17 Beta 版本。虽然细节可能会有所改变,但是该版本包含了 PostgreSQL 17 最终正式版中所有新特性的预览。

本文给大家简单介绍一下 PostgreSQL 17 功能亮点。

查询与维护性能改进

  • PostgreSQL 17 持续改进了整体的性能。负责回收存储空间的 Vacuum 进程采用了新的数据结构,内存使用量最高减少了 20 倍,同时减少了完成任务的总体时间。另外,Vacuum 进程能够使用的内存不再限制为 1GB,而是由系统变量 maintenance_work_mem 进行配置。

  • PostgreSQL 17 增加了一个流式 I/O 接口,提高了顺序扫描和 ANALYZE 命令的性能。该版本还引入了新的配置参数,用于控制事务、子事务以及 multixact 缓冲区大小。

  • PostgreSQL 17 可以同时使用查询计划器的统计信息和通用表表达式(WITH 语句)的排序顺序进一步优化这类查询性能。同时,该版本明显提高了使用 B-树索引优化的 IN 子句。新版本还消除了针对具有 NOT NULL 约束字段的 IS NOT NULL 查询条件,这种情况下不需要执行任何操作。PostgreSQL 17 还支持 BRIN 索引的并行构建。

  • PostgreSQL 17 改进了 WAL 锁的管理,提高了并发修改操作的性能,一些测试显示性能提高了 2 倍。

  • PostgreSQL 17 增加了更多显式 SIMD 指令,包括 bit_count 函数的 AVX-512 指令集支持。

分区与分布式工作负载增强

  • PostgreSQL 17 增强了分区管理功能,支持分区的拆分以及合并,同时支持分区表的标识列以及排除约束功能。另外,PostgreSQL 外部数据封装器(postgres_fdw)可以将 EXISTS 和 IN 子查询下推到远程服务器,从而提高查询性能。
  • PostgreSQL 17 为逻辑复制增加了新的功能,简化了高可用环境以及版本升级。使用 pg_upgrade 升级 PostgreSQL 17到更高版本时,不再需要删除逻辑复制槽,从而避免升级之后的数据再同步操作。另外,该版本引入了逻辑复制的故障转移控制。PostgreSQL 17 还允许逻辑复制订阅者使用 hash 索引进行查找,并且增加了一个 pg_createsubscriber 命令行工具,可以从物理复制的副本节点创建逻辑复制。

开发体验

  • PostgreSQL 17 继续实现了 SQL/JSON 标准,增加了 JSON_TABLE 函数(JSON 数据转换为 PostgreSQL 二维表),SQL/JSON 构造函数(JSON、JSON_SCALAR、JSON_SERIALIZE)以及查询函数(JSON_EXISTS、JSON_QUERY、JSON_VALUE)。这些功能最初计划在 PostgreSQL 15 版本发布,但是在测试版本中被取消了。另外,PostgreSQL 17 还为 jsonpath 实现增加了更多功能,以及将 JSON 数据转换为其他类型的功能,
  • 新版本中的 MERGE 命令可以支持 RETURNING 子句,可以返回被修改的数据行。新增的 merge_action 函数可以用于查看 MERGE 命令执行的具体操作(INSERT、UPDATE、DELETE)。PostgreSQL 17 还支持可更新视图的 MERGE 命令,同时增加了 WHEN NOT MATCHED BY SOURCE 子句,可以针对源数据不存在的情况执行相应的操作。
  • PostgreSQL 17 改进了 COPY 批量操作的性能,导出大数据行时的性能最高可以提升 2 倍。另外,当源端编码和目标编码相同时,COPY 性能同样获得了提升。COPY 命令还新增了一个 ON_ERROR 选项,允许导入数据行出错时继续处理其他数据。
  • PostgreSQL 17 提供了更安全的异步查询取消方法,驱动程序可以通过 libpq API 使用该功能。
  • PostgreSQL 17 提供了一个内置的排序规则程序,可以实现类似 C 排序规则的排序语义,同时使用 UTF-8 编码,而不是 SQL_ASCII 编码。这种新的排序规则具有不变性,无论 PostgreSQL 运行在哪种操作系统上,排序结果都不会变化。

安全增强

  • PostgreSQL 17 增加了一个新的连接参数 sslnegotiation,允许使用 ALPN 协议时直接进行 TLS 握手,从而减少一次网络消耗。PostgreSQL 在 ALPN 目录中注册了 postgresql。
  • PostgreSQL 17 引入了事件触发器,可以在认证时触发。另外,libpq 引入了一个新的 API:PQchangePassword,可以自动在客户端对密码进行哈希,避免服务器中记录密码明文。
  • PostgreSQL 17 增加了一个新的预定义角色 pg_maintain,拥有执行 VACUUM、ANALYZE、CLUSTER、REFRESH MATERIALIZED VIEW、REINDEX 以及 LOCK TABLE 操作的权限。该版本同时保证了执行维护操作时 search_path 的安全性。另外,用户可以使用 ALTER SYSTEM 设置未知的自定义服务器变量。

备份恢复

  • PostgreSQL 17 支持 pg_basebackup 增量备份,同时引入了一个新的工具 pg_combinebackup,用于还原备份时合并多个备份。
  • PostgreSQL 17 还增加了一个 pg_dump 参数: --filter,用于指定一个包含/排除导出对象的配置文件。

系统监控

  • EXPLAIN 命令增加了两个选项:SERIALIZE(输出为了网络传输进行数据序列化需要的时间)以及 MEMORY(输出优化器使用内存的情况)。另外,EXPLAIN 还可以显示 I/O 块读写消耗的时间。
  • PostgreSQL 17 规范了 pg_stat_statements 中 CALL 命令的参数,减少了频繁调用的存储过程的数量。
  • VACUUM 进程的报告可以显示清理索引的进度。
  • PostgreSQL 17 引入了一个新的视图 pg_wait_events,提供了等待事件的相关描述。该视图可以和 pg_stat_activity 一起使用,提供关于活动会话等待的进一步分析。
  • pg_stat_bgwriter 视图中的部分信息被拆分到了新的视图 pg_stat_checkpointer

更多特性

除了以上内容,PostgreSQL 17 还增加了大量的新功能和改进,完整的新特性列表可以参考官方的发行说明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不剪发的Tony老师

为 5 个 C 币而折腰。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值