将新对象添加到Postgresql中的JSONB

问题描述 投票:2回答:1

我试图在名为PARAM的一列中将新对象添加到我的表中,在该列中我有:

{"array1": [
    {"array2": [
        {"objId": 1, "data": false, "repeat": 1},
        {"objId": 2, "data": false, "repeat": 1}
    ]}
]}

我想将新对象添加到array2我正在使用该查询

UPDATE table
SET param = jsonb_set(
        param::jsonb,
        array['array1'],
        (param->'array1'->>'array2')::jsonb || jsonb_build_object('objId', '3','data', 'false','repeat', '1')::jsonb)
WHERE ...

但是得到

{"array1": [
    {"array2": [
        {"objId": 1, "data": false, "repeat": 1},
        {"objId": 2, "data": false, "repeat": 1},
        {"objId": 3, "data": false, "repeat": 1}
    ]}
]}

我的PARAM变为空。任何人都可以解决吗?

I have based my solution on that topic

sql arrays postgresql jsonb
1个回答
2
投票

尝试一下:

select 
      jsonb_set(
                param::jsonb,
                '{array1,0,array2}',
                jsonb_extract_path(param, 'array1','0','array2')::jsonb ||
                jsonb_build_object('objId', '3','data', 'false','repeat', '1')::jsonb
               )

您可以根据需要放置where子句

© www.soinside.com 2019 - 2024. All rights reserved.