跳转至

POSTGRESQL 16 BETA1特性

性能提升

PostgreSQL 16 在查询执行方面包括了性能提升。该版本增加了更多的查询并行性,包括允许 FULL 和 RIGHT 连接并行执行,以及 string_agg 和 array_agg 聚合函数的并行执行。此外,PostgreSQL 16 可以在 SELECT DISTINCT 查询中使用增量排序。还有一些优化窗口查询、RANGE 和 LIST 分区查找的改进,并支持 RIGHT 和 OUTER 查询中的“反连接”。

PostgreSQL 16 还可以通过 COPY 并发批量加载数据来提高性能,最高可达 300%。

该版本还引入了支持 x86 和 ARM 架构的 CPU 加速,并为 ASCII 和 JSON 字符串处理、数组和子事务搜索提供了优化。此外,PostgreSQL 16 还引入了负载均衡到 libpq 中,这是 PostgreSQL 的客户端库。

逻辑复制功能增强

逻辑复制(Logical Replication)是 PostgreSQL 用户可以实时将数据流式传输到其他 PostgreSQL 或其他实现逻辑协议的外部系统的功能。在 PostgreSQL 16 之前,用户只能在主实例上创建逻辑复制发布者。PostgreSQL 16 增加了在备用实例上执行逻辑解码的功能,为用户提供更多分配工作负载的选项;例如,使用比主实例更空闲的备用实例来逻辑复制更改。

此外,PostgreSQL 16 还包括对逻辑复制的几个性能改进。这包括允许订阅者并行应用大型事务,在 UPDATE 或 DELETE 操作期间使用 PRIMARY KEY 以外的索引进行查找,并允许在初始化期间使用二进制格式复制表。

开发者体验

PostgreSQL 16 继续实现 SQL/JSON 标准来操作 JSON 数据,包括支持 SQL/JSON 构造函数(例如 JSON_ARRAY()、JSON_ARRAYAGG() 等)和标识函数(IS JSON)。此版本还新增了 SQL 标准的 ANY_VALUE 聚合函数,它可以从聚合集中返回任意值。为方便起见,PostgreSQL 16 现在允许您指定非十进制整数字面量,例如 0xff、0o777 和 0b101010,并使用下划线作为千位分隔符,例如 5_432。

这个版本为 psql 客户端添加了扩展查询协议的支持。用户可以执行查询,例如 SELECT 1 + 1+2,并使用 \bind 命令替换变量。

安全功能

PostgreSQL 16 继续通过新的预定义角色为用户授予特权访问而不需要超级用户。其中包括 pg_maintain,它使得可以执行 VACUUM、ANALYZE、REINDEX 等操作,以及 pg_create_subscription,它允许用户创建逻辑复制订阅。此外,从这个版本开始,逻辑复制订阅者将以表所有者身份而不是超级用户身份执行表上的事务。

PostgreSQL 16 现在允许您在 pg_hba.conf 和 pg_ident.conf 文件中使用正则表达式匹配用户和数据库名称。此外,PostgreSQL 16 增加了在 pg_hba.conf 和 pg_ident.conf 中包含其他文件的功能。PostgreSQL 16 还增加了对 SQL 标准 SYSTEM_USER 关键字的支持,它返回用于建立会话的用户名和认证方法。

PostgreSQL 16 还增加了对 Kerberos 凭据委派的支持,它允许扩展程序(如 postgres_fdw 和 dblink)使用经过身份验证的凭据连接到其他服务。此版本还为客户端添加了一些新的面向安全的连接参数。包括 require_auth,客户端可以指定它愿意从服务器接受哪些身份验证方法。现在可以将 sslrootcert 设置为 system,以指示 PostgreSQL 使用客户端操作系统提供的受信任证书颁发机构(CA)存储。

监控和管理

PostgreSQL 16 增加了几个新的监控功能,包括新的 pg_stat_io 视图,提供 I/O 统计信息。此版本还提供了一个时间戳,用于记录最后一次扫描表或索引的时间。pg_stat_activity 使用的规范化算法也进行了改进。

这个版本包括对页面冻结策略的改进,有助于 VACUUM 和其他维护操作的性能。PostgreSQL 16 还改进了文本排序规则的通用支持。PostgreSQL 16 将 ICU 设置为默认的排序提供程序,并增加了对预定义的 unicode 和 ucs_basic 排序的支持。

PostgreSQL 16 向 pg_dump 添加了额外的压缩选项,包括对 lz4 和 zstd 压缩的支持。

其他变化

PostgreSQL 16 移除了 promote_trigger_file 选项,以实现启动备用实例的升级。用户应该使用 pg_ctl promote 命令或 pg_promote() 函数来升级备用实例。

PostgreSQL 16 引入了 Meson 构建系统,它将最终替代 Autoconf。此版本还为开发功能提供了基础支持,这些功能将在未来的版本中得到改进。其中包括一个开发者标志,用于启用直接I/O(DirectIO)功能,以及在订阅者中指定 origin=none 后,使用逻辑复制在两个表之间进行双向复制的能力。

对于 Windows 安装,PostgreSQL 16 现在支持最低版本为 Windows 10。