跳转至

POSTGRESQL 12 特性

显著的性能提升

PostgreSQL 12提供了显著的性能和维护增强,针对其索引系统和分区进行了优化。

PostgreSQL中标准的B-tree索引已经优化,以更好地处理频繁修改索引的工作负载。使用TPC-C基准测试的适度实现,在平均使用空间上减少了40%,并且整体查询性能有所提高。

分区表的查询也得到明显改进,特别是对于仅需要从有限子集检索数据的数千个分区的表。PostgreSQL 12还提高了在使用INSERT和COPY向分区表添加数据的性能,并具有在不阻塞查询的情况下将新分区附加到表的功能。

此外,PostgreSQL 12中的索引还有其他增强功能,包括GiST、GIN和SP-GiST索引类型在write-ahead日志生成中降低开销,可以在GiST索引上创建covering索引(包括子句),可以使用SP-GiST索引使用距离运算符(<->)执行K最近邻查询,CREATE STATISTICS现在支持最常见值(MCV)统计信息,可帮助在使用非均匀分布的列时生成更好的查询计划。

使用LLVM引入的即时编译(JIT)在PostgreSQL 11中启用,现在默认启用。 JIT编译可以为WHERE子句、目标列表、聚合和一些内部操作的执行提供性能优势,并且如果您的PostgreSQL安装使用LLVM进行编译或打包,则可用。

SQL合规性和功能增强

PostgreSQL因其符合SQL标准而闻名-这也是它从“POSTGRES”重命名为“PostgreSQL”的原因之一-PostgreSQL 12添加了几个功能来继续实现SQL标准与增强功能。

PostgreSQL 12介绍了使用SQL/JSON标准中定义的JSON路径表达式在JSON文档上运行查询的能力。这样的查询可以利用存储在JSONB格式中的文档的现有索引机制有效地检索数据。

通用表达式,也称为WITH查询,现在可以自动内联PostgreSQL 12,从而可以帮助提高许多现有查询的性能。在此版本中,如果WITH查询不是递归的,没有任何副作用,并且仅在查询后期引用一次,则可以内联WITH查询。

PostgreSQL 12引入了“生成列”。在SQL标准中定义,此列类型会从表中其他列的内容计算其值。在此版本中,PostgreSQL支持“存储生成列”,其中计算得出的值存储在磁盘上。

国际化

PostgreSQL 12通过允许用户定义“不确定性排序”来扩展它对ICU排序的支持,例如允许不区分大小写或不考虑口音的比较。

身份验证

PostgreSQL通过几个增强功能扩展了其强大的身份验证方法支持,提供了额外的安全性和功能。本版本引入了通过GSSAPI接口进行身份验证的客户端和服务器端加密,以及如果PostgreSQL使用OpenLDAP进行编译,则可以发现LDAP服务器的能力。

此外,PostgreSQL 12现在支持一种多因素身份验证形式。 PostgreSQL服务器现在可以要求认证客户端使用clientcert= verify-full选项提供带有其用户名的有效SSL证书,并将其与其他认证方法(例如scram-sha-256)的要求相结合。

管理

PostgreSQL 12引入了REINDEX CONCURRENTLY命令,可以重建索引而不会阻止对索引的写入,从而允许用户避免为索引重建长时间导致停机的情况。

此外,PostgreSQL 12现在可以使用pg_checksums命令在离线集群中启用或禁用页面校验和。先前,页面校验和是一项用于验证存储在磁盘上数据完整性的功能,只能在初始化initdb时启用PostgreSQL群集。

原文:

https://www.postgresql.org/about/news/postgresql-12-released-1976/