PostgreSQL 全球开发组宣布,PostgreSQL 15 的第一个 Beta 版本现已可供下载 (https://www.postgresql.org/download/)。此版本包含了 PostgreSQL 15 正式发布时将提供的所有功能预览,不过在 Beta 期间某些细节可能会有所更改。
您可以在发布说明 (https://www.postgresql.org/docs/15/release-15.html) 中找到 PostgreSQL 15 所有功能和变更的信息:
https://www.postgresql.org/docs/15/release-15.html (https://www.postgresql.org/docs/15/release-15.html)
本着开源 PostgreSQL 社区的精神,我们强烈建议您在您的系统上测试 PostgreSQL 15 的新功能,帮助我们消除可能存在的 Bug 或其他问题。虽然我们不建议您在生产环境中运行 PostgreSQL 15 Beta 1,但我们鼓励您寻找方法在此 Beta 版本上运行您的典型应用工作负载。
您的测试和反馈将帮助社区确保 PostgreSQL 15 发布版本维持我们交付稳定、可靠的全球最先进开源关系型数据库的标准。请阅读更多关于我们 Beta 测试流程 (https://www.postgresql.org/developer/beta/) 及如何参与贡献的信息:
https://www.postgresql.org/developer/beta/ (https://www.postgresql.org/developer/beta/)
PostgreSQL 15 功能亮点
开发者体验
PostgreSQL 15 新增了简化和增强开发者体验的功能。
本版本引入了 MERGE (https://www.postgresql.org/docs/15/sql-merge.html),这是一个用于有条件地对数据执行写入操作(INSERT、UPDATE 或 DELETE)的 SQL 标准命令。在此版本之前,相同的行为只能通过存储过程或在有限的情况下使用 INSERT ... ON CONFLICT (https://www.postgresql.org/docs/15/sql-insert.html) 来实现。借助 PostgreSQL 15,开发人员可以编写简单、直观的查询来选择合适的数据修改操作。
PostgreSQL 在 2012 年的 9.2 版本 (https://www.postgresql.org/about/news/postgresql-92-released-1415/) 中添加了对 JSON 的支持。五年后发布的 SQL/JSON 标准指定了多种用于访问和操作关系型数据库中存储的 JSON 数据的接口。PostgreSQL 15 在现有 SQL/JSON 路径语言支持的基础上,增加了更多标准 SQL/JSON 函数 (https://www.postgresql.org/docs/15/functions-json.html#FUNCTIONS-SQLJSON)。这些包括 SQL/JSON 构造器 (https://www.postgresql.org/docs/15/functions-json.html#FUNCTIONS-SQLJSON-PRODUCING)、查询/自省函数 (https://www.postgresql.org/docs/15/functions-json.htm#FUNCTIONS-SQLJSON-QUERYING),以及将 JSON 数据转换为表的能力 (https://www.postgresql.org/docs/15/functions-json.html#FUNCTIONS-JSONTABLE)。
PostgreSQL 15 添加了更多正则表达式函数 (https://www.postgresql.org/docs/15/functions-matching.html#FUNCTIONS-POSIX-REGEXP),包括 regexp_count、regexp_instr、regexp_like 和 regexp_substr。PostgreSQL 15 中引入的 range_agg (https://www.postgresql.org/docs/15/functions-aggregate.html) 函数用于将范围数据类型 (https://www.postgresql.org/docs/15/rangetypes.html) 聚合为 multirange 类型,现在也支持聚合 multirange 类型。
性能
PostgreSQL 15 在过去几个版本的性能提升基础上持续改进。本版本在排序较大数据集时实现了显著的速度提升,特别是超过 work_mem 参数的数据集。
PostgreSQL 15 的性能提升涵盖了多种查询类型。这包括为 SELECT DISTINCT (https://www.postgresql.org/docs/15/queries-select-lists.html#QUERIES-DISTINCT) 语句引入并行化,以及改进使用 row_number()、rank() 和 count() 的窗口函数 (https://www.postgresql.org/docs/15/functions-window.html) 的性能。使用 PostgreSQL 外部数据包装器 (https://www.postgresql.org/docs/15/postgres-fdw.html) postgres_fdw (https://www.postgresql.org/docs/15/postgres-fdw.html) 管理远程 PostgreSQL 服务器上数据的应用程序,现在可以启用事务并行提交 (https://www.postgresql.org/docs/15/postgres-fdw.html#id-1.11.7.47.11.7)。对涉及分区表的查询也有多项性能增强。
PostgreSQL 系统表和 TOAST (https://www.postgresql.org/docs/15/storage-toast.html) 表(用于存储大于单个页面 8kB 的数据)现在可以利用索引去重 (https://www.postgresql.org/docs/15/btree-implementation.html#BTREE-DEDUPLICATION),从而受益于更小的索引和更快的查找速度。
psql 的 \copy 命令(用于批量加载数据)在 PostgreSQL 15 中也获得了性能改进。
备份、归档与压缩
在前一版本引入 LZ4 压缩的基础上,PostgreSQL 15 在多个组件中添加了 Zstandard (zstd) 压缩支持。
pg_basebackup (https://www.postgresql.org/docs/15/app-pgbasebackup.html)(用于对 PostgreSQL 集群进行完整备份的工具)现在支持使用 Gzip、LZ4 或 Zstandard 压缩进行服务端压缩。pg_basebackup 客户端现在还可以解压使用 LZ4 和 Zstandard 压缩的备份。
预写日志(WAL)文件现在可以通过 wal_compression (https://www.postgresql.org/docs/15/runtime-config-wal.html#GUC-WAL-COMPRESSION) 配置参数使用 LZ4 和 Zstandard 压缩。此外,PostgreSQL 15 还添加了 recovery_prefetch (https://www.postgresql.org/docs/15/runtime-config-wal.html#GUC-RECOVERY-PREFETCH) 选项,通过预取数据块来加速恢复操作。本版本新增了一个名为 pg_walinspect (https://www.postgresql.org/docs/15/pgwalinspect.html) 的模块,允许您直接从 SQL 检查 WAL 文件的信息。
PostgreSQL 15 允许您无需运行 Shell 命令即可执行 WAL 归档,只需指定 archive_library (https://www.postgresql.org/docs/15/runtime-config-wal.html#GUC-ARCHIVE-LIBRARY) 即可。basic_archive (https://www.postgresql.org/docs/15/basic-archive.html) 模块中提供了一个 WAL 归档库的示例。此外,扩展现在可以定义自己的 WAL 资源管理器,使其能够与逻辑复制协同工作。
逻辑复制
PostgreSQL 15 为逻辑复制引入了行过滤 (https://www.postgresql.org/docs/15/logical-replication-row-filter.html) 和列过滤 (https://www.postgresql.org/docs/15/sql-createpublication.html)。此外,用户现在可以方便地指定发布某个模式中的所有表,而之前只能对数据库中的所有表执行此操作。
本版本还增加了对冲突处理 (https://www.postgresql.org/docs/15/logical-replication-conflicts.html) 的更多支持。订阅者现在可以指定 disable_on_error 以在发生错误时自动停止逻辑复制。PostgreSQL 15 使得可以通过 ALTER SUBSCRIPTION ... SKIP (https://www.postgresql.org/docs/15/sql-altersubscription.html) 命令跳过应用某些变更。
管理
PostgreSQL 15 引入了 jsonlog 格式的日志 (https://www.postgresql.org/docs/15/runtime-config-logging.html#RUNTIME-CONFIG-LOGGING-JSONLOG)。这使得 PostgreSQL 日志可以被许多执行结构化日志聚合和分析的程序所使用。PostgreSQL 15 现在默认记录运行缓慢的检查点和 autovacuum 操作。
psql (https://www.postgresql.org/docs/15/app-psql.html) 客户端现在新增了 \dconfig 命令用于检查配置参数的值。默认情况下,\dconfig 显示所有未设置为默认值的配置参数。
PostgreSQL 15 现在将所有服务器级统计信息存储在共享内存中。服务器不再运行统计信息收集器进程。
ALTER TABLE (https://www.postgresql.org/docs/15/sql-altertable.html) 命令现在可以修改表的 ACCESS METHOD,用于设置表所使用的存储系统。
安全
PostgreSQL 15 在 PostgreSQL 集群中创建数据库时引入了新的默认设置。当创建新数据库时,数据库所有者(由 pg_database_owner (https://www.postgresql.org/docs/15/predefined-roles.html) 表示)和超级用户之外的用户不能再在默认的 public 模式中创建对象。
PostgreSQL 15 添加了对"安全调用者视图 (https://www.postgresql.org/docs/15/sql-createview.html)"的支持,它使用执行查询的用户的权限而不是创建视图的用户的权限。
PostgreSQL 15 中的非特权用户现在可以被授予权限 (https://www.postgresql.org/docs/15/sql-grant.html) 通过 SET 和 ALTER SYSTEM 更改服务器变量。
其他功能
PostgreSQL 15 还添加了许多其他新功能和改进。其中许多可能对您的使用场景也有帮助。请查看发布说明 (https://www.postgresql.org/docs/15/release-15.html) 获取新功能和变更功能的完整列表:
https://www.postgresql.org/docs/15/release-15.html (https://www.postgresql.org/docs/15/release-15.html)
Bug 测试与兼容性
每个 PostgreSQL 版本的稳定性都在很大程度上依赖于您,即社区,使用您的工作负载和测试工具测试即将发布的版本,以在 PostgreSQL 15 正式发布之前发现 Bug 和回归问题。由于这是 Beta 版本,数据库行为、功能细节和 API 的小幅变更仍然可能发生。您的反馈和测试将帮助确定新功能的最终调整,因此请尽快进行测试。用户测试的质量将帮助确定我们何时可以发布最终版本。
公开问题列表 (https://wiki.postgresql.org/wiki/PostgreSQL_15_Open_Items) 可在 PostgreSQL wiki 上查看。您可以使用 PostgreSQL 网站上的此表单提交 Bug (https://www.postgresql.org/account/submitbug/):
https://www.postgresql.org/account/submitbug/ (https://www.postgresql.org/account/submitbug/)
Beta 发布计划
这是版本 15 的第一个 Beta 版本。PostgreSQL 项目将根据测试需要发布额外的 Beta 版本,随后是一个或多个候选发布版本,直到 2022 年底最终发布。更多信息请参阅 Beta 测试 (https://www.postgresql.org/developer/beta/) 页面。
相关链接
下载 (https://www.postgresql.org/download/)
Beta 测试信息 (https://www.postgresql.org/developer/beta/)
PostgreSQL 15 Beta 发布说明 (https://www.postgresql.org/docs/15/release-15.html)
PostgreSQL 15 公开问题 (https://wiki.postgresql.org/wiki/PostgreSQL_15_Open_Items)
提交 Bug (https://www.postgresql.org/account/submitbug/)