我正在尝试重命名列表中所有对象的json键,例如给定my_table
my_col
包含jsonb列表:
[{name:0}, {name:1}, {name:2}]
我已经研究了如何通过使用显式索引删除和添加密钥来更改列表的单个元素,例如。
select (my_col->0)::jsonb - 'name' ||
jsonb_build_object('new_name', my_col->0->'name')
from my_table
但是,如何将其应用于列表中的所有元素?
答案 0 :(得分:0)
到目前为止,这是我使用横向连接的最佳答案。
update my_table t1
set my_col =
(select json_agg(el::jsonb - 'name' || jsonb_build_object('new_name', el->'name'))
from my_table t2, jsonb_array_elements(t2.my_col) as el
where t1.id = t2.id)
理想情况下,只有一些整齐的模式匹配运算符,例如my_col->*->'name'
。