博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【pgsql使用记录】json类型字段
阅读量:6237 次
发布时间:2019-06-22

本文共 1383 字,大约阅读时间需要 4 分钟。

  hot3.png

        产品提了个需求,要给用户的某些操作设置一些默认值,我不想机械添加新增字段,我只是需要一个配置而已,需要的时候读出来,就跟文件配置一样。读写文件毕竟又是个力气活,还存在IO问题。要是数据库能直接存json就好了。经查,发现pgsql早就支持json类型的数据了,不管怎样,我还是要为此给pgsql点32个赞!!

于是定义新字段

 ALTER TABLE user ADD COLUMN extra_config json; 

做一些测试:

插入一个数组数据

INSERT INTO user (id, extra_config) VALUES(1, '{"name":"张三","age":18,"birthday":"2013-03-03"}')

INSERT INTO user (id, extra_config) VALUES(2, '{"name":"李四","age":17,"birthday":"2014-03-15"}')

完成之后,我要检索名字为"张三"的用户

SELECT id,extra_config::json->'name' as name FROM user WHERE (extra_config::json->'name')::text = '张三'

这样,就可以了。

另外,在展示一个少复杂的例子:

select (a::json->'name')::text,a::json->'name', * from json_array_elements('[{"name":"李四","age":17,"birthday":"2014-03-15"},{"name":"王武","age":27,"birthday":"2013-03-15"}]') as a

where (a::json->'name')::text LIKE '%李四%';

上述结果,请注意返回的字段类型。其中::text返回字符串,::json返回json

其中,where 条件里的结果实际上是 双引号引起来的 "李四",所以直接用=比较是不可能得到结果的。我想要直接得到具体字段值可以试用 #>> 注意:两个尖括号!

再来复杂点:

select a::json#>'{person,name}' as name_json,(a::json#>'{person,name}')::text as name_txt,(a::json#>>'{person,name}')::text as name_textval_only,* from json_array_elements('[{"person":{"name":"李四","age":17,"birthday":"2014-03-15"}},{"person":{"name":"王武","age":27,"birthday":"2013-03-15"}}]') as a

where (a::json#>>'{person,name}')::text = '李四';

这次json有更多的嵌套,于是需要路径的支持了,仔细观察#>>之后的路径选择语法'{person,name}',谁用谁知道!

have fun ~

转载于:https://my.oschina.net/lxrm/blog/210301

你可能感兴趣的文章
领导牛B轰轰的 https 介绍应用
查看>>
Centos7下的Openssl和CA
查看>>
windows 2003防止网卡被禁用的设置
查看>>
lvs健康检测脚本
查看>>
马哥运维架构 第五周作业
查看>>
如何使用netstat命令验证DDOS***
查看>>
【zabbix学习笔记之三】部署zabbix-agent端
查看>>
找到数组中第i大、第i小的值
查看>>
我的友情链接
查看>>
ceph源码片段——c++引用
查看>>
list 之 增 删 改 查 排序 合并
查看>>
python模块paramiko的上传下载和远程执行命令方法
查看>>
SAS硬盘和SATA硬盘的介绍和区别
查看>>
开源TMS团队协作web系统
查看>>
linux批量修改文件夹,文件的权限,所属用户,用户组
查看>>
qt5.0.2 + opencv244
查看>>
elasticsearch日期类型
查看>>
产品经理应该如何学习
查看>>
做个精致的程序员
查看>>
挂载U盘参数大全
查看>>