将JSONB字段从单个值转换为具有自己键的对象



我有一个表,我们把它命名为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
);

最新更新