sql - 如何更新 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 来做吗?
解决方案
如果要替换的元素的路径是固定的,您可以使用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()
用于格式化。
推荐阅读
- r - 如何添加具有 6 个类别的新列?
- mysql - 使用 MYSQL 查询设置 Group_CONCAT 大小
- haskell - Haskell - 递归从最后一项开始
- python - 打印函数或 lambda
- ruby-on-rails - 如何在嵌入式 Docusign 签名期间保持会话
- flutter - 如何在拖动容器时在颤动中设置容器的(最小和最大)顶部位置
- c# - 不可实例化的密封类中可能出现 NullReferenceException
- reactjs - 这在 React 中意味着什么?
- java - 为什么在 Jtable 设置中可调整大小和可编辑为全部真实,即使我在定制器对话框中取消了它们全部?
- reactjs - 为什么 REactsetState 在第一次点击时不起作用?