分享使人进步

233 阅读2分钟
原文链接: mp.weixin.qq.com

标题:PostgreSQL中Json类型的使用

Json数据格式作为支撑当前互联网时代数据传输的重要的数据格式,PostgreSQL(简称:pgsql)实现了对json格式的支持,毫无疑问这点很棒,而且技术相对于其他关系型数据库要成熟很多。

1 . json与jsonb的区别

pgsql在支持json格式时,是同时提供了两种数据类型:json和jsonb,在数据存储上是有区别的:

json类型在存储时对原文进行精准复制,原原本本的将原文本存了起来;

jsonb数据类型在写入库时会进行分析转换,将不保留空白,不保留原始文本的顺序,也不保留重复的键值,虽然在存储时的转换成本略高,但是jsonb数据以分解的二进制存储,所以处理速度上更快,而且支持索引。

举例说明:

执行结果:

2.1 增

    根据官方文档(自己搜索)描述,json与jsonb里操作函数是类似的,我们以最新版文档(9.6)里的例子进行说明

    首先我们定义一个表结构:

插入数据最直接的方式就是直接使用字符串,

insert into dev_table_001(product)

values('[{"Name": "航空产品1","Des": "产品描述1"},{"Name": "航空产品2","Des": "产品描述2"}]')

除此之外,还提供了一些函数:jsonb_object、jsonb_build_array、jsonb_build_object等函数方法转换

给一条json数组增加一个成员怎么做呢,我们可以使用“||”或jsonb_insert()函数

两者的区别在于:使用“||”符时只能选择再数组尾部或者头部插入,使用json_insert函数则可以在指定索引位置插入数据。

2.2 . 修改

我们现在开发使用的(9.4)版本的常规做法是把数据取出来,编辑完成之后再去更新原来的字段,从9.5开始pgsql支持使用jsonb_set()函数修改jsonb数据,并逐步修复了一些bug,jsonb_set()函数现在不仅可以修改jsonb数组中的某个值,还可以修改指定某条记录的某个字段的值:

2.3 . 删除

官方文档里关于JSONB的删除只有操作符,暂时没有相关函数方法,以下的文档是针对元素的删除:

2.4 . 查询

关于查询,现在支持的方法除了转字符串模糊查询,还提供了很多遍历查询的方法,这里就拿jsonb_populate_recordset()函数举例说明:

思考下会发现,对于数值的类型的成员的比较还是稍微有些麻烦,需要一条条把数据取出来再进行比较,希望pgsql的函数越来越强大!

感谢大家阅读到最后,初次分享对json类型做了一些基础的分析实验,希望能以后由浅入深逐步和大家一起探讨更深刻的知识!