PostgreSQL 团队宣布发布开源关系数据库管理系统的最新版本 PostgreSQL 12。
PostgreSQL 12 显着提高了查询性能 - 特别是在处理大量数据时,并且总体上还优化了磁盘空间的使用。
新功能包括:
- JSON Path 查询语言的实现(SQL/JSON 标准最重要的部分);
- 优化公共表表达式的执行(WITH);
- 支持生成的列
社区还继续致力于 PostgreSQL 的可扩展性和可靠性,开发对国际化、身份验证功能的支持,并提供更简单的系统管理方法。
此版本包括可插拔存储引擎接口的实现,现在允许开发人员创建自己的数据存储方法。
性能改进
PostgreSQL 12 对索引和分区系统的性能和维护进行了重大改进。
B 树索引是 PostgreSQL 中的标准索引类型,在版本 12 中针对涉及频繁索引修改的工作负载进行了优化。 使用 PostgreSQL 12 的 TPC-C 基准测试表明,空间使用量平均减少了 40%,查询性能总体提高。
针对分区表的查询得到了显着的改进,特别是对于包含数千个分区且仅需要处理数据数组的有限部分的表。 使用 INSERT 和 COPY 将数据添加到分区表的性能得到了改进,并且能够在不阻塞查询的情况下附加新分区。
PostgreSQL 12 对影响整体性能的索引进行了额外的改进,包括:
- 减少为 GiST、GIN 和 SP-GiST 索引类型生成 WAL 时的开销;
- 在 GiST 索引上创建所谓的覆盖索引(INCLUDE 子句)的能力;
- 使用距离运算符 (<->) 和 SP-GiST 索引执行“最近邻居”查询(k-NN 搜索)的能力;
- 支持使用 CREATE STATISTICS 收集最常见值 (MCV) 统计信息,这有助于在使用值分布不均匀的列时获得更好的查询计划。
PostgreSQL 11 中引入的使用 LLVM 的 JIT 编译现在默认启用。 JIT 编译可提高使用 WHERE 子句、目标列表、聚合和某些内部操作中的表达式时的性能。 如果您使用 LLVM 编译了 PostgreSQL 或使用启用了 LLVM 的 PostgreSQL 包,则该选项可用。
SQL 语言功能和标准兼容性的改进
PostgreSQL 12 引入了使用 SQL/JSON 标准中定义的 JSON 路径表达式查询 JSON 文档的功能。 此类查询可以利用以 JSONB 格式存储的文档的现有索引机制来有效检索数据。
公用表表达式(也称为WITH查询)现在可以使用PostgreSQL 12中的替换自动执行,这反过来又可以帮助提高许多现有查询的性能。 在新版本中,WITH 查询的替换部分只有在非递归、没有副作用并且在查询的后续部分中仅引用一次时才能执行。
PostgreSQL 12 引入了对“生成列”的支持。 在 SQL 标准中描述,此列类型根据同一表中其他列的内容计算值。 在此版本中,PostgreSQL 支持“存储生成列”,其中计算值存储在磁盘上。
国际化
PostgreSQL 12 允许用户定义“非确定性排序规则”,从而扩展了对 ICU 排序规则的支持,例如,允许不区分大小写或不区分重音的比较。
认证
PostgreSQL 通过提供额外安全性和功能的多项增强功能扩展了对强身份验证方法的支持。 此版本引入了用于通过 GSSAPI 接口进行身份验证的客户端和服务器端加密,以及当使用 OpenLDAP 编译 PostgreSQL 时 PostgreSQL 发现 LDAP 服务器的能力。
此外,PostgreSQL 12 现在支持多重身份验证选项。 PostgreSQL 服务器现在可以使用 clientcert=verify-full 要求客户端提供有效的 SSL 证书以及相应的用户名,并将其与单独的身份验证方法要求(例如 scram-sha-256)结合起来。
管理
PostgreSQL 12 引入了使用 REINDEX CONCURRENTLY 命令执行非阻塞索引重建的功能。 这使得用户可以避免在冗长的索引重建过程中 DBMS 停机。
此外,在 PostgreSQL 12 中,您可以使用 pg_checksums 命令在关闭集群中启用或禁用页面校验和。 以前,页校验和这一功能有助于验证存储在磁盘上的数据的完整性,只能在使用 initdb 初始化 PostgreSQL 集群时启用。
来源: linux.org.ru