在 jsonb 列下的 json 数组中添加新对象

Add new object to json array under jsonb column

我在 postgres table 中有 jsonb 数据类型列 "payload",其值如下:

{"testEvents": [
        {
            "id": 113068,
            "name1": "test",
            "count": 15
        },
        {
            "id": 113069,
            "name1": "test1",
            "count": 15
        }
    ]
}

现在我想通过向其添加一个 jsonobject 来更新内部 jsonarray。所以,我的结果会是

{"testEvents": [
        {
            "id": 113068,
            "name1": "test",
            "count": 15
        },
        {
            "id": 113069,
            "name1": "test1",
            "count": 15
        }
        ,
        {
            "id": 113070,
            "name1": "test2",
            "count": 18
        }
    ]
}

我尝试了以下查询:

UPDATE table SET payload = payload ||'{"id":113070,"name1":"test2","count":18}';

但它正在替换以前的值。 由于我是这个主题的新手,任何人都可以帮助以正确的方式做到这一点。

jsonb_insert() 是你的函数

demo:db<>fiddle

UPDATE mytable
SET jsondata =
    jsonb_insert(jsondata, '{testEvents,0}', '{"id":113070, "name1":"test2","count":18}');

第二个参数定义必须插入新元素的路径。 0 是第一个位置。

您需要将新值附加到数组 ('testEvents') 而不是完整的 JSON 值。这可以使用 jsonb_set()

来完成
update the_table
  set payload = jsonb_set(payload, '{testEvents}', payload -> 'testEvents' || '{"id":113070,"name1":"test2","count":18}');

部分 payload -> 'testEvents' || '{"id":113070,"name1":"test2","count":18}' 将新值附加到数组,然后 jsonb_set 用新数组替换 testEvents 下的数组。