首页 > 解决方案 > 在 postgresql 中将新对象附加到 JSONB

问题描述

我试图在一个名为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变为空。任何人都可以解决这个问题?

我的解决方案基于该主题

标签: sqlarrayspostgresqljsonb

解决方案


尝试这个:

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 子句


推荐阅读