[英]Postgres: How to alter jsonb value type for each element in an array?
我在 Postgres 10.12 中有一个名为items的 jsonb 列,如下所示:
{
"items": [
{
"itemQty": 2,
"itemName": "snake"
},
{
"itemQty": 1,
"itemName": "x kodiyum"
}
]
}
现在我想将每个数组元素的itemQty类型转换为字符串,以便新值如下所示:
{
"items": [
{
"itemQty": "2",
"itemName": "snake"
},
{
"itemQty": "1",
"itemName": "x kodiyum"
}
]
}
我该怎么做呢? 我已经浏览了 Postgres jsonb 的文档,但无法弄清楚。
On the server-side, I am using Spring boot and Hibernate with com.vladmihalcea.hibernate.type.json (Hibernate Types 52) if it helps.
谢谢
您可以取消嵌套数组,修改元素,然后重新构建它。 假设您的表的主键是id
,那就是:
select jsonb_build_object(
'items', jsonb_agg(
jsonb_build_object(
'itemQty', (x.obj ->> 'itemQty')::text,
'itemName', x.obj ->> 'Name'
)
)
)new_items
from mytable t
cross join lateral jsonb_array_elements(t.items -> 'items') as x(obj)
group by id
请注意,这里并不真正需要显式转换为::text
,因为->>
无论如何都提取文本值:我保留它是因为它使意图更清晰。
如果您想要update
声明:
update mytable t
set items = (
select jsonb_build_object(
'items', jsonb_agg(
jsonb_build_object(
'itemQty', (x.obj ->> 'itemQty')::text,
'itemName', x.obj ->> 'Name'
)
)
)
from jsonb_array_elements(t.items -> 'items') as x(obj)
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.