Postgresql处理JSON类型中替换某个属性值问题

一、问题描述

使用postgresql对json的特性使用sql批量处理json中某个属性的值
结构如下:

{
	"id": 1,
	"parentId": 123,
	"globalParameters": [{
		"value": "date",
		"boardId": 123,
		"canReName": false
	}]
}

想要替换boardId的值

二、解决方案

有没有办法获取所选JSON数组元素的索引并将SELECT语句和UPDATE语句合并为一个?

update 
    t_data 
set
    tent_info= 
        jsonb_set(
            tent_info::jsonb,
            array['globalParameters', elem_index::text, 'boardId'],
            parentid::text::jsonb,
            true)
from (
 select 
        pos- 1 as elem_index,
				elem 
    from 
        t_data , 
        jsonb_array_elements(tent_info::jsonb->'globalParameters') with ordinality arr(elem, pos)
    where
        type_id =33
) sub
where
   type_id =33;

基本执行上面就可以批量处理josn数组里面boardId的属性值了

三、处理单个属性值

update t_data set  
--content_info = jsonb_set(tent_info::jsonb,'{id}'::text[],id::text::jsonb)
content_info = jsonb_set(tent_info::jsonb,'{parentId}'::text[],parentid::text::jsonb)
where ype_id =33

因为是更新同一个tent_info字段,所有得分两次执行才行。

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值