我有一个表,我们把它命名为myTable,结构如下
ID | data
____________
uuid | jsonb
jsonb字段中的数据是一个数组,结构如下:
[
{
"valueA": "500",
"valueB": "ABC",
},
{
"valueA": "300",
"valueB": "CDE",
}
]
我想做的是通过将valueB转换为一个对象来转换数据,newKey对应于"valueB">
的当前值这是我想要的结果:
[
{
"valueA": "500",
"valueB": {"newKey": "ABC"},
},
{
"valueA": "300",
"valueB": {"newKey": "CDE"},
}
]
我试着用下面的查询来做:
UPDATE myTable
SET data = (
SELECT jsonb_agg (
jsonb_insert(elems, '{valueB, newKey}', elems->'valueB')
)
FROM jsonb_array_elements(data) elems
);
遗憾的是,它似乎没有做任何事情。
我的另一个想法是创建一个新字段,将其初始化为对象,然后删除旧的代码并重命名新的,但似乎必须有一种方法来做我想要的直接?
使用jsonb_build_object()解决
UPDATE myTable
SET data = (
SELECT jsonb_agg (
jsonb_insert(elems, '{valueB}', jsonb_build_object('newKey', elems->'valueB'))
)
FROM jsonb_array_elements(data) elems
);