PostgreSQL 14 Beta 1 发布!

发布于 2021-05-20,作者:PostgreSQL 全球开发小组
PostgreSQL 项目

PostgreSQL 全球开发小组宣布 PostgreSQL 14 的第一个测试版现已可供下载。此版本包含 PostgreSQL 14 最终版本中将提供的所有功能的预览,尽管发布的一些细节在此之前可能会发生变化。

您可以在发行说明中找到有关 PostgreSQL 14 中所有功能和更改的信息。

https://postgresql.ac.cn/docs/14/release-14.html

本着开源 PostgreSQL 社区的精神,我们强烈建议您在您的系统中测试 PostgreSQL 14 的新功能,以帮助我们消除可能存在的错误或其他问题。虽然我们不建议您在生产环境中使用 PostgreSQL 14 Beta 1,但我们鼓励您找到方法针对此测试版运行您的典型应用程序工作负载。

您的测试和反馈将帮助社区确保 PostgreSQL 14 版本坚持我们交付世界上最先进的开源关系数据库的稳定可靠版本的标准。请阅读更多关于我们的beta 测试过程以及您如何做出贡献的信息

https://postgresql.ac.cn/developer/beta/

PostgreSQL 14 功能亮点

性能

PostgreSQL 14 延续了最近版本在为各种规模的工作负载提供性能优势的趋势。

此版本对具有大量数据库连接的 PostgreSQL 系统的事务吞吐量进行了重大改进,无论这些连接处于活动状态还是空闲状态。

PostgreSQL 14 还包含减少 B 树索引开销的额外改进,包括减少频繁更新索引的表中的膨胀GiST 索引现在可以在其构建过程中预先对数据进行排序,从而加快索引创建速度并减小索引大小。SP-GiST 索引现在支持覆盖索引,允许用户通过 INCLUDE 子句向索引添加其他不可搜索的列。

PostgreSQL 14 中查询并行性有很多改进。除了并行顺序扫描的整体性能改进外,PL/pgSQL 中的 RETURN QUERY 指令现在可以使用并行性执行查询。REFRESH MATERIALIZED VIEW 现在也可以使用查询并行性。

PostgreSQL 14 还引入了在使用外部数据包装器查询远程数据库时利用查询并行性的能力。当设置 async_capable 标志时,PostgreSQL 外部数据包装器 postgres_fdw 在 PostgreSQL 14 中添加了对此的支持。postgres_fdw 还支持批量插入,并且可以使用 IMPORT FOREIGN SCHEMA 导入表分区,现在还可以在外部表上执行 TRUNCATE

此版本还对分区系统进行了一些改进,包括在仅影响少量分区的情况下更新或删除表中的行时的性能提升。在 PostgreSQL 14 中,现在可以使用 ALTER TABLE ... DETACH PARTITION ... CONCURRENTLY 命令以非阻塞的方式分离分区。

在先前版本中引入的增量排序现在可以被 PostgreSQL 14 中的窗口函数使用。此新版本为扩展统计信息添加了更多功能,现在可以将其应用于表达式

PostgreSQL 几十年来一直支持其“超大尺寸数据”列(即TOAST 系统)的压缩,但此版本增加了现在选择使用 LZ4 压缩进行列压缩的功能。

数据类型 + SQL

在现有的范围类型支持基础上,PostgreSQL 14 添加了新的 多范围类型,可让您指定非连续范围的有序列表,例如:

SELECT datemultirange( daterange('2021-07-01', '2021-07-31'), daterange('2021-09-01', '2021-09-30'), daterange('2021-11-01', '2021-11-30'), daterange('2022-01-01', '2022-01-31'), daterange('2022-03-01', '2022-04-07') );

新的多范围类型支持范围类型可用的现有操作。

PostgreSQL 14 现在添加了一个通用下标框架,用于检索嵌套对象中的信息。例如,您现在可以使用下标语法检索 JSONB 数据类型中的嵌套信息,例如:

SELECT ('{ "this": { "now": { "works": "in postgres 14!" }}}'::jsonb)['this']['now']['works'];

PostgreSQL 14 还增加了对存储过程OUT 参数的支持,并允许 GROUP BY 子句使用 DISTINCT 关键字删除重复的 GROUPING SET 组合。

对于递归公用表表达式WITH 查询),PostgreSQL 14 添加了 SEARCHCYCLE 的语法便利,分别帮助进行排序和循环检测。

PostgreSQL 14 中还有一个新的 date_bin 函数,可以将时间戳与指定的时间间隔对齐,这种技术称为“分箱”。

管理

PostgreSQL 14 对 VACUUM 进行了多项改进,对索引进行了优化。自动清理现在会分析分区表,并将有关行数的信息传播到父表。 ANALYZE 的性能也得到了提高,可以使用 maintenance_io_concurrency 参数进行控制。

PostgreSQL 14 包含对可以监控的信息的许多改进,包括使用 pg_stat_progress_copy 视图跟踪 COPY 进度的能力。此版本允许您从 pg_stat_wal 视图跟踪 WAL 活动,并从 pg_stat_replication_slots 视图检查复制槽统计信息。

PostgreSQL 14 中有几个新参数可以帮助管理连接。其中包括 idle_session_timeout,可以在指定的时间段后关闭空闲连接,以及 client_connection_check_interval 参数,如果客户端断开连接,PostgreSQL 可以取消长时间运行的查询。

REINDEX 命令现在可以处理分区表的所有子索引,PostgreSQL 14 添加了 pg_amcheck 实用程序来帮助检查数据损坏。

复制和恢复

PostgreSQL 14 为逻辑复制添加了许多性能优势,包括将正在进行的事务流式传输到订阅者,而不是等待它们完成的能力。ALTER SUBSCRIPTION 可以使用新的 ADD/DROP PUBLICATION 语法更轻松地添加/删除发布。

PostgreSQL 14 在崩溃恢复时如何启动 PostgreSQL 的性能方面有所提高,您现在可以在处于备用模式的 PostgreSQL 实例上使用 pg_rewind

安全

PostgreSQL 14 增加了通过使用 pg_read_all_datapg_write_all_data 预定义角色,为用户提供表/视图/序列的通用“只读”和“只写”权限的功能。

此版本还默认使用 SCRAM-SHA-256 来管理新 PostgreSQL 实例上的密码。此外,pg_hba.conf 中的 clientcert 参数现在必须使用 verify-caverify-full 的值,而不是旧值。

PostgreSQL 14 可以使用证书的“专有名称”(DN) 通过 pg_hba.conf 文件中的 clientname=DN 参数进行基于证书的身份验证

其他功能

PostgreSQL 14 中添加了许多其他新功能和改进,其中一些可能对您的用例来说与上述功能一样重要或更重要。请参阅发行说明,以获取新功能和更改功能的完整列表

https://postgresql.ac.cn/docs/14/release-14.html

测试错误和兼容性

每个 PostgreSQL 版本的稳定性很大程度上取决于您,社区,使用您的工作负载和测试工具测试即将推出的版本,以便在 PostgreSQL 14 正式发布之前发现错误和回归。由于这是一个 Beta 版本,数据库行为、功能细节和 API 仍有可能发生细微变化。您的反馈和测试将有助于确定新功能的最终调整,因此请在近期进行测试。用户测试的质量有助于确定我们何时可以发布最终版本。

未解决问题的列表在 PostgreSQL Wiki 中公开提供。您可以使用 PostgreSQL 网站上的此表单报告错误

https://postgresql.ac.cn/account/submitbug/

Beta 时间表

这是版本 14 的第一个 beta 版本。PostgreSQL 项目将根据需要发布额外的 beta 版本进行测试,然后发布一个或多个候选版本,直到 2021 年末发布最终版本。有关更多信息,请参阅 Beta 测试页面。

链接