文章目录
索引相关的性能、功能和管理
内联 WITH 查询(通用表表达式)
分区增强
遵循 SQL/JSON 规范的 JSON 路径查询
排序规则
最频繁值统计
计算列
可插拔式表存储接口
页面校验和
认证与连接安全
变更注意事项
2019-05-23 PostgreSQL 全球开发组发布消息称,PostgreSQL 12 第一个 beta 版提供下载测试。这个版本包含了 PostgreSQL 12 正式版中的所有特性预览,不过某些细节可能存在变数。最终的 PostgreSQL 12 正式版将会在 2019 年下半年发布。
随之发布的包括 PostgreSQL 12 最新特性,以下是其中一部分。
索引相关的性能、功能和管理
PostgreSQL 12 改进了标准 B-树索引的整体性能以及索引的磁盘空间管理。这些改进还减少了频繁修改的B-树索引占用的空间大小。
此外,PostgreSQL 12 新增了并发重建索引的功能,使得执行REINDEX操作时不会阻塞索引的写入。这一特性可以解决生产环境中长时间的索引重建导致的停机问题。
PostgreSQL 12 扩展了某些特殊索引的功能。PostgreSQL 11 引入了覆盖索引,即INCLUDE子句,现在该功能可以支持 GiST 索引。SP-GiST 索引现在针对支持距离操作(<->)的数据类型提供了K-近邻(K-NN)查询功能。
PostgreSQL 12 明显减少了创建 GiST、GIN 或者 SP-GiST 索引产生的预写式日志(WAL),为 PostgreSQL 集群的磁盘利用率和其他特性(例如连续归档和流复制)带来了诸多改进。
内联 WITH 查询(通用表表达式)
通用表表达式(即WITH查询)如果满足以下所有条件,将会被自动内联到查询语句中:
非递归
无副作用
只被引用一次
这一特性消除了自 PostgreSQL 8.4 引入WITH子句以来一直存在的优化障碍(optimization fence)。
如果有需要,你还可以使用MATERIALIZED子句强制WITH查询物化,例如:
WITH c AS MATERIALIZED (
SELECT * FROM a WHERE a.x % 4 = 0
)
SELECT * FROM c
JOIN d ON d.y = a.x;
分区增强
PostgreSQL 12 改进了访问包含数千分区的表中少量分区时的性能。
PostgreSQL 12 还提高了分区表的INSERT和COPY操作的性能。ATTACH PARTITION现在不会阻塞分区表上的并发查询。另外, PostgreSQL 12 支持引用分区表的外键。
遵循 SQL/JSON 规范的 JSON 路径查询
PostgreSQL 12 支持 SQL:2016 标准中 SQL/JSON 规定的 JSON 路径查询。与 XML 查询中的 XPath 表达式类似,JSON 路径表达式使得查询 JSON 文档时,除了可以使用值进行比较之外,还可以使用各种算术表达式和函数。
某些表达式可以用于提供 GIN 索引的性能,实现跨 JSON 数据集的高性能查找。
排序规则
PostgreSQL 12 支持 ICU 排序规则的大小写不敏感(case-insensitive)和重音不敏感(accent-insensitive)的比较方式,即“不确定性排序规则”。使用这些方式时,可以为比较和排序操作提供便捷,但是也可能导致性能下降,因为需要对字符串执行额外的检查。
最频繁值统计
PostgreSQL 10 引入了 CREATE STATISTICS,用于收集多个字段上的复杂统计信息,以便改进查询计划。现在,该语句支持最频繁值统计。这一功能改进了非均匀分布值上的查询计划。
计算列
更多请见:http://www.mark-to-win.com/tutorial/51622.html