将新对象添加到jsonb列下的json数组

时间:2019-07-16 13:06:58

标签: json postgresql jsonb postgresql-9.5

我在postgres表中有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}';

但是它将替换先前的值。 由于是该主题的新手,所以任何人都可以通过正确的方法来提供帮助。

2 个答案:

答案 0 :(得分:0)

jsonb_insert()是您的职责

demo:db<>fiddle

PM1    PM2    PM3    PM4    PM5    PM6
PM7    PM8    PM9    PM10   PM11   PM12
PM13   PM14   PM15   PM16   PM17   PM18
PM19   PM20   PM21   PM22   PM23   PM24
PM25   PM26   PM27   PM28   PM29   PM30
PM31   PM32   PM33   PM34   PM35   PM36
PM37   PM38   PM39   PM40   PM41   PM42
PM43   PM44   PM45   PM46   PM47   PM48
PM49   PM50   PM51   PM52   PM53   PM54
PM55   DPSI1  DPSI2  DPSI3  DPSI4  DPSI5
DPSI6    DPSI7    DPSI8    DPSI9    DPS10   DPSI11
DPSI12   DPSI13   DPSI14   DPSI15   DPS16   DPSI17
DPSI18   DPSI19   DPSI20   DPSI21   DPS22   DPSI23
DPSI24   DPSI25   DPSI26   DPSI27   DPS28   DPSI29
DPSI30   DPSI31   DPSI32   DPSI33   DPS34   DPSI35
DPSI36   DPSI37   DPSI38   DPSI39   DPS40   DPSI41
DPSI42   DPSI43   DPSI44   DPSI45   DPS46   DPSI47
DPSI48   DPSI49   DPSI50   DPSI51   DPS52   DPSI53

第二个参数定义必须在其中插入新元素的路径。 UPDATE mytable SET jsondata = jsonb_insert(jsondata, '{testEvents,0}', '{"id":113070, "name1":"test2","count":18}'); 是第一位置。

答案 1 :(得分:0)

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

完成
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下的数组。