作者介绍
谭峰,网名francs,《PostgreSQL实战》作者之一,《PostgreSQL 9 Administration Cookbook》译者之一,PostgreSQL 中文社区委员,致力于PostgreSQL技术分享,博客 https://postgres.fun
PostgreSQL 之前版本已支持 Json 和 Jsonb 数据类型,支持非关系数据的存储和检索,如果 Json 数据较复杂(层级多、嵌套json、包含数组等 ),之前版本不能方便的检索 Json 数据元素值。
PostgreSQL 12 版本的一个重量级特性是新增 SQL/JSON path 特性,支持基于 Json 元素的复杂查询,文档上关于 SQL/JSON path 内容很丰富,本文仅演示简单的用例。
发行说明
Add support for the SQL/JSON path language (Nikita Glukhov, Teodor Sigaev, Alexander Korotkov, Oleg Bartunov, Liudmila Mantrova)
This allows execution of complex queries on JSON values using an SQL-standard language.
SQL/JSON Path Expressions 语法
SQL/JSON path 特性的核心是定义函数表达式,其实现方式是使用了 jsonpath 数据类型,jsonpath 以二进制格式展现 SQL/JSON 函数表达式。
SQL/JSON path 函数表达式使用了 JavaScript 的一些语法,如下:
l 点号 . 表示引用 Json 数据的元素
l 方括号 [] 表示引用数组元素
l Json 数据中的数组元素下标从0开始
SQL/JSON path 函数表达式的变量,如下:
l $ 符号表示要查询的Json文本的变量
l $varname 表示指定变量
l @ 指在 filter 表达式中表示当前路径元素的变量
SQL/JSON Path Expressions 基本演示
为了方便演示,创建以下测试表并插入一条 Json 测试数据,如下:
CREATE TABLE t_track ( a jsonb);
INSERT INTO t_track (a) VALUES ('
{ "gpsname": "gps1",
"track" :
{
"segments" : [