首页 > 解决方案 > 如何更新 postgresql jsonb 字段中的数组?

问题描述

我有一个带有 jsonb 字段的表,一个值示例:

{
    "id": "test",
    "data": [
        {
            "folder1": ["id1", "id2", "id3"]
        }
    ]
}

我想将数组 ["id1", "id2", "id3"] 里面的数据替换为 [{"id": "id1", "size": 10}, {"id": "id2", "大小“:100},{“id”:“id3”,“大小”:1000}]:

{
    "id": "test",
    "data": [
        {
            "folder1": [
                {"id": "id1", "size": 10}, 
                {"id": "id2", "size": 100}, 
                {"id": "id3", "size": 1000}
            ]
        }
    ]
}

如果可以在单个 sql 构造中更新它,我需要用 pl/sql 来做吗?

标签: sqljsonpostgresqljsonb

解决方案


如果要替换的元素的路径是固定的,您可以使用jsonb_set()

jsonb_set(
        mycol,
        '{data,0,folder1}',
         '[{"id": "id1", "size": 10}, {"id": "id2", "size": 100}, {"id": "id3", "size": 1000}]'::jsonb
    )

DB Fiddle 上的演示-jsonb_pretty()用于格式化。


推荐阅读