2021-05-20,PostgreSQL全球开发组宣布PostgreSQL 14的第一个Beta版本正式提供下载。这个版本包含将来PostgreSQL 14正式版本中的所有特性和功能,当然一些功能的细节在正式版本发布时可能会有些变化。 可以从以下网址浏览PostgreSQL 14版本所有的新特性和变化内容。按PostgreSQL开源社区的精神,我们鼓励大家在用户的场景下测试新功能,以帮助我们消除Bug或是其他可能存在的问题。当然我们不建议大家在生产环境使用PostgreSQL 14 Beta1版本, 我们鼓励在用户使用生产环境下的数据或工作负载测试这个版本。用户的测试将帮助社区来确保PostgreSQL 14版本保持我们一贯以来的标准,即提供稳定、可靠的世界上功能最为强大的开源的关系数据库系统。用户可以从以下网址浏览有关Beta测试的过程以及如何向PostgreSQL项目作贡献的内容。
PostgreSQL 14版本保持了一贯以来的传统,即在各种规模负载下都可以提供较理想的性能表现。这个版本尤其是在有大量连接的场景下(不论这些连接是活动或是休闲状态),大幅提高了事务的吞吐量。
PostgreSQL 14版本也在减少B树索引负载方面有了提高,包括对频繁更新的表索引减少了表膨胀的情况。
GiST索引在创建的过程中可以预排序,对快速创建索引或是减小索引大小都有好处。
PostgreSQL 14也在并行查询方面作为较多改进。除了对并行顺序扫描进行了全面提升外,现在PL/SQL中,使用RETURN QUERY可以并行查询,而REFRESH MATERIALIZED VIEW物化视图刷新现在也可以使用并行机制执行了。
PostgreSQL 14版本中也对使用外部数据封装器查询远程数据库引入了并行查询机制。在将async_capable参数设置为true后,PostgreSQL的外部数据封装器之一postgres_fdw就支持并行查询,也支持批量导入,同时通过使用IMPORT FOREIGN SCHEMA指令可以导入分区表,甚至还可以对外部表执行truncate批量清除。
14版本也对分区表进行了几处优化,包括对涉及较多分区的记录进行更新或删除。在新版本里,分区表也可以通过使用 ALTER TABLE … DETACH PARTITION … CONCURRENTLY非阻塞的模式进行摘除。
增量排序是从上一个版本引入的功能,现在这个功能在新的14版本中也可以用于窗口函数了。新版本对扩展统计信息也进行了增强。
数十年来PostgreSQL都提供了对大数据列的压缩功能(TOAST大数据列存储技术),在这个14版本中增加了用户可以选择LZ4算法进行数据列压缩的能力。
在现有PostgreSQL对range类型支持的基础上,新的14版本增加了新的多范围数据类型multirange,让用户可以定义非连续的范围数据,比如
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') )
。新的multirange类型支持range类型的所有操作。
PostgreSQL 14版本现也增加了通用的从嵌套对象中提取信息的下标访问机制,比如,从嵌套的JSONB中提取信息:
SELECT ('{ "this": { "now": { "works": "in postgres 14!" }}}'::jsonb)['this']['now']['works'];
。
PostgreSQL 14版本也对存储过程提供了新的OUT参数,并且允许GROUP BY使用distinct关键字来移至GROUP SET组合中的重复项。
对可递归的公共表达式CTE功能,PostgreSQL14版本增加了便于理解的语义关键字SEARCH和CYCLE来帮助进行排序或是循环检查。
新版本中也增加了一个date_bin函数,用于处理时间戳与指定的时间间隔的操作,该技术称之为binning。
PostgreSQL 14版本中对VACUUM操作也进行了多处改进,特别是针对索引操作。Autovacuum进程现在可以分析分区子表,然后将相关信息传给主表。另外通过设置 maintenance_io_concurrency参数,ANALYZE的性能也会得到提升。
PostgreSQL 14版本对可以进行监控或跟踪发信息也进行了改进,包括通过使用pg_stat_progress_copy视图来跟踪COPY的进度,通过使用pg_stat_wal视图来跟踪WAL的活动,通过使用pg_stat_replication_slots视图来检查复制槽的信息。
PostgreSQL 14版本中也增加了几个参数来管理数据库连接, idle_session_timeout参数用于在指定时间后,关闭已不活动的连接,client_connection_check_interval参数用于让主进程取消用户已断开连接但仍在长时间运行的查询。
REINDEX指令现在对分区表可以让所有分区子表进行索引;14版本也增加了pg_amcheck工具程序来检查数据不一致性的问题。
许多其他的新特性和改进也加入了PostgreSQL 14,部分内容对一些特定的用户也许比上面提及的改进更重要。请参阅 发布声明详稿 来浏览完整的全部新特性或是改进功能列表。
每一个PostgreSQL版本的稳定性都依赖于社区中的广大用户,来使用自己的工作负载和测试工具来发现Bug及进行回归测试。由于这还是一个Beta版本,数据库操作的方式、新特性的细节以及API可能都还会有小的修改。用户的反馈和测试将帮助我们决定对新特性的最终优化,所以请在近期就进行测试。用户测试的质量将帮助我们决定何时可以发布最终版本。
目前仍待解决的问题在PostgreSQL的WIKI页面上有一个 问题列表。用户可以通过 以下网址来报告Bug:https://www.postgresql.org/account/submitbug/
这是PostgreSQL 14的第1个Beta版本,PostgreSQL项目组会根据测试情况来发布更多的测试版本,在2021年末正式版本发布前会发布1个或多个候选版本。更多信息请浏览 Beta版本测试信息