postgresql中的json和jsonb

娄嘉石
2023-12-01

1. 简介

postgresql9.3以后,我们可以将表的字段类型设置为json。
同时,postgresql还提供了jsonb格式,jsonb是json的二进制形式。
二者区别:

  1. json格式写入快,但读取慢;
  2. jsonb格式写入慢,但读取快。

2. 操作符

json&jsonb操作符右操作数类型描述例子结果
->int获取json数组的元素‘[{“a”:“foo”},{“b”:“bar”}]’::json->1{“b”:“bar”}
->text通过key值获取json对象字段‘{“a”: {“b”:“foo”}}’::json->‘a’{“b”:“foo”}
->>int获取json数组元素为字符串‘[1,2,3]’::json->>23
->>text获取json对象字段为字符串‘{“a”:1,“b”:2}’::json->>‘b’2
#>text[]在指定路径下获取json对象‘{“a”: {“b”:{“c”: “foo”}}}’::json#>’{a,b}’{“c”: “foo”}
#>>text[]在指定路径下获得json对象为字符串‘{“a”:[1,2,3],“b”:[4,5,6]}’::json#>>’{a,2}’3
jsonb操作符右操作数类型描述例子
@>jsonb在顶层,左边的json值包含右边的json值‘{“a”:1, “b”:2}’::jsonb @> ‘{“b”:2}’::jsonb
<@jsonb在顶层,右边的json值包含左边的json值‘{“b”:2}’::jsonb <@ ‘{“a”:1, “b”:2}’::jsonb
||jsonb将两个jsonb值连接成一个新jsonb值‘[“a”, “b”]’::jsonb || ‘[“c”, “d”]’::jsonb
?text判断字符串是否是该json的顶级键‘{“a”:1, “b”:2}’::jsonb ? ‘b’
?|text[]判断数组字符串中的任何一个是否作为该json的顶级键‘{“a”:1, “b”:2, “c”:3}’::jsonb ?| array[‘b’, ‘c’]
?&text[]判断所有的数组字符串是否都作为该json顶级键‘[“a”, “b”]’::jsonb ?& array[‘a’, ‘b’]
-text从左操作数中删除键/值对或字符串元素‘{“a”: “b”}’::jsonb - ‘a’
-text[]从左操作数中删除多个键/值对或字符串元素‘{“a”: “b”, “c”: “d”}’::jsonb - ‘{a,c}’::text[]
-integer删除具有指定索引的数组元素(末尾为负整数)‘[“a”, “b”]’::jsonb - 1
#-text[]删除具有指定路径的字段或元素‘[“a”, {“b”:1}]’::jsonb #- ‘{1,b}’

原文地址:https://www.postgresql.org/docs/11/functions-json.html

 类似资料: