insert into test (json,name) values ('[{"a":"foo"},{"b":"bar"},{"c":"baz"}]'::json,'jsonarray')
select json->2 from test where name='jsonarray'
select (json->2)->'c' from test where name='jsonarray'
select (json->2)->>'c' from test where name='jsonarray'
'{"a": {"b":{"c": "foo"}}}'::json
'{"a":[1,2,3],"b":[4,5,6]}'::json
select '{"a":1, "b":2}'::jsonb @> '{"b":2}'::jsonb
select '{"b":2}'::jsonb <@ '{"a":1, "b":2}'::jsonb
insert into test (json,name) values ('[1,2,3]'::json,'array')
select json->2 from test where name='array'
select json->>2 from test where name='array'
insert into test2 select * from json_each('{"a":"foo", "b":"bar"}')
select * from json_each_text('{"a":"foo", "b":"bar"}')
select * from json_populate_recordset(null::role, '[{"id":1,"role":2},{"id":3,"role":4}]')
select * from role
insert into role select * from json_populate_recordset(null::role, '[{"role":"xx","id":"12"}]')
select * from json_populate_record(null::role, '{"id":1,"role":2,"create_date":"2020/09/27"}')
select * from role
select substr('{"id":1,"role":2,"create_date":"2020/09/27"}', 1,"length"( '{"id":1,"role":2,"create_date":"2020/09/27"}')-1)
SELECT ''''||(tools_str2array('1,48,54,24,99,0,2' ,',')::varchar[])[2]||'''' ;
select JSON_ARRAY_LENGTH(tools_str2array('1,48,54,24,99,0,2' ,',')::jsonb)
select array_length(ARRAY[1,48,54,24,99,0,2],1)
select jsonb_set('{"a":"1"}','a', '2',true)
SELECT '{"a":"aaa","b":2,"c":"3"}'::jsonb -> 'a'
SELECT '{"a":1,"b":2,"c":3}'::jsonb - 'a' -'b',
SELECT '{"a": true, "c": true}'::jsonb || '{"a": false, "b": 2}'::jsonb
select array_to_json(array_agg(row_to_json(t))) as array_to_json
from (
select 1 as id,'a' as name,now() as addtime
union all
select 2 as id,'b' as name,now() as addtime
union all
select 3 as id,'c' as name,now() as addtime
) t;
select row_to_json(t) as array_to_json
from (
select * from menu where id=1
) t;
select '{"name":"abc","b":"kk"}'::jsonb || '{"name":"aaa"}'::jsonb as name;
{"b": "kk", "name": "aaa"}
(1 row)
select '{"name":"abc"}'::jsonb || '{"age":"18"}'::jsonb as person;
person
{"age": "18", "name": "abc"}
(1 row)
update
crm.test
extend = extend::jsonb || ('{"name":"' || (extend->>'arrive') || '"}')::jsonb
where
id = 1;
Postgresql中的json和array用法结合近期接触到的知识点,做了一个归纳。会持续更新json官网文档 http://www.postgres.cn/docs/12/datatype-json.htmljson的两种格式总结:json输入快,处理慢。是精准拷贝,所以能准确存储遗留对象的原格式,如对象键顺序。jsonb输入慢,处理快。会被重新解析成json数据,不保存原对象的键顺序,并且去重相同的键值,以最后一个为准。通常,除非有特别特殊的需要(例如遗留的对象键顺序假设),大多数应
测试PostgreSQL在使用文档类型这方面的性能
三、测试方法
本次采用apache的开源测试工具jmeter,采用数据结构DataTable通过http协议post方式发送数据到server服务,server服务通过jdbc接口存储到数据库中。
3.1 数据准备
24列的数据字段,设有数据权限的dataTable数据
3.2 场景
MongoDB
PostgreSQL(json)
PostgreSQL(jsonb)
PostgreSQL(json/jsonb)
5w插入平均响应时间
10w插入平均响应时间
20w插入平均响应时间
5w查询平均响应时间
10w查询平均响应时间
20w查询平均
作为一种简单易用的非结构化数据,JSON格式的应用场景非常广泛。在当前的大数据环境下,处理非结构化数据的需求越来越频繁,我们是不是必须用MongoDB这一类NoSQL的解决方案?强大的PostgreSQL数据库,在RDBMS的基础上提供了对JSON的完善支持,不需要MongoDB也可以玩转JSON。
PostgreSQL-9.2中引入了对JSON类型的支持,经过几个大版本的进化,目前对J...
// -> 返回json
select '[{"a":"foo"},{"b":"bar"},{"c":"baz"}]'::json->2 // 输出 {"c":"baz"}
select '{"a": {"b":"foo"}, "c":{"a": "aaa"}}'::json->'a' //
项目遇到一种查询场景,字段是jsonb类型,数据key对应的value 是数组集合类型,现在需要查询出包含某字符串的所有记录都查询出来
如下图所示的param字段是jsonb类型,查询resource_instance_id中包含某字符串的所有记录都查询出来,注意resource_instance_id对应的value可能是字符串也可能是数组格式:
直接上sql
select * from resource_job WHERE param ->>'resource_instance_id' @@
如果您在 PostgreSQL 中处理 JSON 数据时遇到语法错误,可能是您的 JSON 数据格式不正确。以下是一些可能的原因和解决方法:
1. 缺少引号或逗号:在 JSON 数据中,每个键和值都必须用双引号括起来,每个键值对之间必须用逗号分隔。如果您缺少引号或逗号,可能会导致语法错误。请检查您的 JSON 数据,确保它符合 JSON 规范。
2. 键或值包含特殊字符:在 JSON 数据中,某些字符需要进行转义,例如反斜杠(\)、双引号(")和控制字符(\b、\f、\n、\r、\t)。如果您的键或值包含这些特殊字符而没有进行转义,可能会导致语法错误。请检查您的 JSON 数据,确保它符合 JSON 规范。
3. 使用无效的 JSON 数据类型:在 PostgreSQL 中,JSON 数据类型有两种形式:JSON 和 JSONB。如果您尝试将 JSONB 数据插入到 JSON 字段中,或者将 JSON 数据插入到 JSONB 字段中,可能会导致语法错误。请确保您使用正确的 JSON 数据类型。
希望这些提示可以帮助您解决问题。如果问题仍然存在,请提供更多详细信息,以便我们更好地了解您的问题。