PostgreSQL-向JSONB数组的每个对象添加键
我的数据库包含一个表,其中有一个列的类型为jsonb,我想使用postgreSQL中的函数/运算符更新这些数据的一部分。考虑到这一点:PostgreSQL-向JSONB数组的每个对象添加键,postgresql,jsonb,Postgresql,Jsonb,我的数据库包含一个表,其中有一个列的类型为jsonb,我想使用postgreSQL中的函数/运算符更新这些数据的一部分。考虑到这一点: { "A":[ {"index":"1"}, {"index":"2"} ], "B":[ {"index":"3"}, {"index":"4"} ] } 假设我们向“a”数组中的对象添加了一个带有空数组的键,以便: { "A":[ {"index":"1", "myArray":[]},
{
"A":[
{"index":"1"},
{"index":"2"}
],
"B":[
{"index":"3"},
{"index":"4"}
]
}
假设我们向“a”数组中的对象添加了一个带有空数组的键,以便:
{
"A":[
{"index":"1", "myArray":[]},
{"index":"2", "myArray":[]}
],
"B":[
{"index":"3"},
{"index":"4"}
]
}
如何继续?
我已经尝试过这种方法但没有成功:
UPDATE myTable SET myColumn = (myColumn::jsonb)->>'A' || '{"myArray":[]}'
显然,所有这些测试都是巨大的失败。我很难理解postgreSQL函数是如何工作的
有人可以帮忙吗?使用
jsonb_数组_元素
和jsonb_集
的方法是正确的想法,但不知何故,您将它们嵌套到了错误的位置:
UPDATE myTable SET myColumn = jsonb_set(myColumn, '{A}', (
SELECT jsonb_agg( element || '{"myArray":[]}' )
FROM jsonb_array_elements(myColumn -> 'A') element
));
()
顺便说一句,如果你的专栏已经有了
jsonb
数据类型,你不需要任何类型转换。非常感谢,它可以工作!但我添加了一些更改,因为事实上,我的列是json
:'),所以我将“myColumn”包含到了一个to_jsonb()
;)必须添加其中jsonb_数组长度(myColumn->'A')>0
@belov该查询是在假设每个json对象都有一个A
属性作为数组的情况下编写的。如果不是这样,则需要添加条件或创建数组。
UPDATE myTable SET myColumn = (
SELECT jsonb_each((element ->> 'A')::jsonb) || '{"myArray":[]}'::jsonb
FROM jsonb_array_elements(myColumn::jsonb) element
)::json
UPDATE myTable SET myColumn = jsonb_set(myColumn, '{A}', (
SELECT jsonb_agg( element || '{"myArray":[]}' )
FROM jsonb_array_elements(myColumn -> 'A') element
));