postgresql----JSON类型和函数

postgresql支持两种json数据类型:json和jsonb,而两者唯一的区别在于效率,json是对输入的完整拷贝,使用时再去解析,所以它会保留输入的空格,重复键以及顺序等。而jsonb是解析输入后保存的二进制,它在解析时会删除不必要的空格和重复的键,顺序和输入可能也不相同。使用时不用再次解析。两者对重复键的处理都是保留最后一个键值对。效率的差别:json类型存储快,使用慢,jsonb类型存储稍慢,使用较快。

注意:键值对的键必须使用双引号

示例:

test=# SELECT '{"bar": "baz", "balance":      7.77, "active":false}'::json;
                         json                         
------------------------------------------------------
 {"bar": "baz", "balance":      7.77, "active":false}
(1 row)

test=# SELECT '{"bar": "baz", "balance":      7.77, "active":false}'::jsonb;
                      jsonb                       
--------------------------------------------------
 {"bar": "baz", "active": false, "balance": 7.77}
(1 row)

测试表:

create table api(jdoc jsonb);

insert into api values('{
"guid": "9c36adc1-7fb5-4d5b-83b4-90356a46061a",
"name": "Angela Barton",
"is_active": true,
"company": "Magnafone",
"address": "178 Howard Place, Gulf, Washington, 702",
"registered": "2009-11-07T08:53:22 +08:00",
"latitude": 19.793713,
"longitude": 86.513373,
"tags": [
"enim",
"aliquip",
"qui"
]}');

test=# SELECT jdoc->'guid', jdoc->'name' FROM api WHERE jdoc @> '{"company": "Magnafone"}';
                ?column?                |    ?column?     
----------------------------------------+-----------------
 "9c36adc1-7fb5-4d5b-83b4-90356a46061a" | "Angela Barton"
(1 row)

jsonb缺省的GIN操作符类支持使用@>、?、?&和?|操作符查询,在api的jdoc上创建一个gin索引。

test=# CREATE INDEX idxgin ON api USING gin (jdoc);
CREATE INDEX

json和jsonb的操作符

postgresql----JSON类型和函数_第1张图片

jsonb额外操作符

postgresql----JSON类型和函数_第2张图片

postgresql----JSON类型和函数_第3张图片

json创建函数

postgresql----JSON类型和函数_第4张图片

postgresql----JSON类型和函数_第5张图片

json处理函数

postgresql----JSON类型和函数_第6张图片

postgresql----JSON类型和函数_第7张图片

postgresql----JSON类型和函数_第8张图片

postgresql----JSON类型和函数_第9张图片

原文链接:https://www.cnblogs.com/alianbog/p/5658156.html

你可能感兴趣的:(postgresql----JSON类型和函数)