PostgreSQL 全球开发组宣布 PostgreSQL 16 的首个 Beta 版本现已 可供下载。此版本包含了 PostgreSQL 16 正式发布时将提供的所有功能的预览,尽管在 Beta 测试期间发布的一些细节可能会发生变化。
您可以在 发布说明 中找到 PostgreSQL 16 中所有新功能和变更的信息。
https://postgresql.ac.cn/docs/16/release-16.html
本着开源 PostgreSQL 社区的精神,我们强烈鼓励您在您的系统上测试 PostgreSQL 16 的新功能,以帮助我们消除可能存在的 bug 或其他问题。虽然我们不建议您在生产环境中使用 PostgreSQL 16 Beta 1,但我们鼓励您尝试运行您的典型应用程序工作负载来测试此 Beta 版本。
您的测试和反馈将帮助社区确保 PostgreSQL 16 版本能够秉承我们一贯的标准,交付稳定、可靠的全球领先的开源关系型数据库。请阅读有关我们 Beta 测试流程 的更多信息,以及您如何做出贡献。
https://postgresql.ac.cn/developer/beta/
PostgreSQL 16 在查询执行方面包含了性能改进。此版本增加了更多查询并行性,包括允许 FULL 和 RIGHT 连接以并行方式执行,以及 string_agg 和 array_agg 聚合函数的并行执行。此外,PostgreSQL 16 可以在 SELECT DISTINCT 查询中使用增量排序。此外,对 窗口查询 进行了多项优化,改进了 RANGE 和 LIST 分区的查找,并支持 RIGHT 和 OUTER 查询中的“反连接”。
PostgreSQL 16 还可以将使用 COPY 进行并发批量数据加载的性能提高高达 300%。
此版本还为 x86 和 ARM 架构引入了对 SIMD CPU 加速的支持,包括对 ASCII 和 JSON 字符串处理、数组和子事务搜索的优化。此外,PostgreSQL 16 为 libpq(PostgreSQL 的客户端库)引入了 负载均衡 功能。
逻辑复制允许 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 + $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 使用的规范化算法也有所改进。
此版本改进了页面冻结策略,这有助于 vacuuming 和其他维护操作的性能。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。此版本还为开发功能增加了基础支持,这些功能将在未来的版本中得到改进。这包括一个启用 DirectIO 的开发者标志,以及在订阅者中指定 origin=none 时,可以使用逻辑复制在两个表之间进行双向复制的能力。
对于 Windows 安装,PostgreSQL 16 现在支持最低 Windows 10 版本。
PostgreSQL 16 还增加了许多其他新功能和改进。其中许多可能对您的用例也很有帮助。请参阅 发布说明 以获取新功能和更改的完整列表。
https://postgresql.ac.cn/docs/16/release-16.html
每个 PostgreSQL 版本的稳定性在很大程度上取决于您——社区——来测试即将发布的版本以及您的工作负载和测试工具,以便在 PostgreSQL 16 正式发布之前发现错误和回归。由于这是 Beta 版本,数据库行为、功能细节和 API 仍可能发生微小更改。您的反馈和测试将有助于确定新功能的最终调整,因此请尽快进行测试。用户测试的质量将决定我们何时可以进行最终发布。
PostgreSQL Wiki 上公开提供了 开放问题 列表。您可以使用 PostgreSQL 网站上的此表单 报告错误。
https://postgresql.ac.cn/account/submitbug/
这是 16 版的首个 Beta 版本。PostgreSQL 项目将在测试需要时发布其他 Beta 版本,然后发布一个或多个 Release Candidate 版本,直到 2023 年末最终发布。有关更多信息,请参阅 Beta 测试 页面。