PostgreSQL更新JSON中的某个字段

PostgreSQL更新JSON中的某个字段

背景需求

现在需要通过SQL的方式,批量对JSON里面的某个字段统一处理,更新成一个新值。

方法一 、使用jsonb_set函数

补充:读取JSON中的值。

select ‘{“a”:“foo”,“b”:1}’::json->‘a’; – 获得键’a’的值
select ‘{“a”:“foo”,“b”:1}’::json->>‘a’; – 以文本形式获得键’a’的值

将键’a’的值替换为3

postgres=# select jsonb_set('{"a":1,"b":2}','{a}','3'::jsonb);
 
    jsonb_set     
 
------------------

 {"a": 3, "b": 2}
 
(1 row)

学习json_set函数后,接下来编写自己的案例

	1. 批量操作值前一定需要先通过select选择性处理,查看是否满足
	select * from  biz_object
	where modelcode = '829609839767532682' and objectcode = '948118654552248419';

	2. 第二步:进行批量更新。
	UPDATE biz_object set confjson = (jsonb_set(confjson::jsonb,'{directorytypecode}','"947998009457774691"'::jsonb)),directorytypecode = '947998009457774691'
	where modelcode = '829609839767532682' and objectcode = '948118654552248419';

方法二、使用update语句也行

利用Navicat等工具

第一步:先查询出所有满足的记录,然后复制成update语句。

第二步:使用文本编辑器(notepad++)等,批量替换值。

第三步:批量执行替换后的update语句。


总结

第一种方案,会修改json的顺序,但是更通用高效。

第二种方案,先查询结果,然后拷贝成update语句,然后使用文本替换工具,批量替换后进行插入。这种方式对于成千上万的数据进行拷贝复制不友好。但小数据量还是可行。适合一些不支持JSON操作的数据库。


参考

发布了274 篇原创文章 · 获赞 119 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/qq_31156277/article/details/96272248