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操作的數據庫。


參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章