PostgreSQL数据类型之json数据类型
从PostgreSQL 9.3版本开始,JSON已经成为内置数据类型
postgresql支持两种json数据类型:json和jsonb
(1)JSON类型把输入的数据原封不动的存放到数据库中。JSONB类型在存放时把JSON解析成二进制格式。
(2)JSONB支持在其上建索引,而JSON不能,这是JSONB的一个很大的优点。
(3)json是对输入的完整拷贝,使用时再去解析,所以它会保留输入的空格,重复键以及顺序等。而jsonb是解析输入后保存的二进制,它在解析时会删除不必要的空格和重复的键,顺序和输入可能也不相同。使用时不用再次解析。两者对重复键的处理都是保留最后一个键值对。效率的差别:json类型存储快,使用慢,jsonb类型存储稍慢,使用较快。
json操作符
新建有json字段的表
create table json_test(
id varchar primary key,
name varchar,
json_value json
)
insert into json_test values(‘001’,‘ay’,’{
“ay_name”:“哈哈”,
“home”:{
“type”:{“interval”:
“5m”
},
“love”:“now”,
“you”:“None”
},
“values”:{
“event”:[“cpu_r”,“cpu_w”],
“data”:[“cpu_r”],
“threshold”:[1,1]
},
“objects”:{
“al”:“beauty”
}
}’);
1.查询第一层
select json_value ->‘home’ as type_name from test_auto_test_case.json_test
2.查询第二、三层
select json_value ->‘home’->‘have’ as type_name from test_auto_test_case.json_test
3.查询数组
select json_value ->‘values’->‘event’->1 as type_name from test_auto_test_case.json_tes
4.#>路劲查询
select json_value #>’{home,type,interval}’ as type_name from test_auto_test_case.json_testt
5.->和->>区别
select json_value ->‘home’->‘have’ as type_name from test_auto_test_case.json_test
select json_value ->‘home’->>‘have’ as type_name from test_auto_test_case.json_test