跳转至

POSTGRESQL 11 特性

分区的可靠性和性能提升

PostgreSQL 11增加了哈希键(也称为哈希分区)来分区数据的能力,进一步完善了PostgreSQL通过值列表或范围对数据进行分区的功能。 PostgreSQL 11还通过改进PostgreSQL外部数据封装器postgres_fdw使用的分区功能来提高其数据联合能力。

为了帮助管理分区,PostgreSQL 11引入了一个捕获所有未匹配分区键数据的默认分区,并且可以在传递到所有分区的分区表上创建主键、外键、索引和触发器。如果更新了该行的分区键,则PostgreSQL 11还支持将行自动移动到正确的分区。

PostgreSQL 11通过使用新的分区消除策略,提高了从分区中读取时的查询性能。此外,PostgreSQL 11现在支持在分区表上流行的“upsert”功能,帮助用户简化应用程序代码并在与其数据交互时减少网络开销。

存储过程中支持事务

开发人员可以在PostgreSQL中创建用户定义函数已经超过20年,但在PostgreSQL 11之前,这些函数无法管理自己的事务。PostgreSQL 11添加了SQL过程,可在函数体内执行完整的事务管理,使开发人员能够创建更高级的服务器端应用程序,例如涉及增量批量数据加载的应用程序。

使用CREATE PROCEDURE命令可以创建SQL过程,使用CALL命令执行,并由服务器端过程语言PL/pgSQL、PL/Perl、PL/Python和PL/Tcl支持。

查询并行性的增强功能

PostgreSQL 11提高了并行查询性能,在并行顺序扫描和哈希连接方面实现性能提升,并更有效地扫描分区数据。如果底层查询无法并行化,则PostgreSQL现在可以并行执行使用UNION的SELECT查询。

PostgreSQL 11将并行性添加到几个数据定义命令中,特别是用于通过执行标准的CREATE INDEX命令生成B-tree索引的命令。现在还可以并行处理从查询创建表或材料化视图的多个数据定义命令,包括CREATE TABLE .. AS、SELECT INTO和CREATE MATERIALIZED VIEW。

表达式的即时编译(JIT)

PostgreSQL 11引入了对即时编译(JIT)的支持,以加速查询执行期间某些表达式的执行。 PostgreSQL的JIT表达式编译使用LLVM项目来加速WHERE子句、目标列表、聚合、投影和一些内部操作中表达式的执行。

要利用JIT编译,您需要安装LLVM依赖项,并在PostgreSQL设置文件中设置jit = on或在PostgreSQL会话中执行SET jit = on以启用JIT编译。

用户体验改进

PostgreSQL关系数据库的增强功能离不开活跃用户社区的反馈和PostgreSQL工作人员的辛勤工作。以下是PostgreSQL 11包含的旨在改善总体用户体验的许多功能中的几个亮点:

消除了ALTER TABLE .. ADD COLUMN .. DEFAULT ..需要使用非空默认值重写整个表的需求,在执行此命令时提供了显着的性能提升。 “Covering indexes”允许用户使用INCLUDE子句向索引添加其他列,并有助于执行基于索引的扫描,尤其是在不可通过B-tree索引进行索引的数据类型上。 增加了窗口函数的其他功能,包括允许RANGE使用PRECEDING/FOLLOWING、GROUPS和frame exclusion。 在PostgreSQL命令行界面中包含了关键字“quit”和“exit”,帮助使离开命令行工具更加容易。