Sql 在Postgres中修改Jsonb内的字段
我正在浏览PostgresJSONB文档,但找不到解决我遇到的一个小问题的方法 我有一张桌子:我的桌子 其中包含以下列: 用户、名称、数据和购买的 需要注意的一点是,数据是一个jsonb,有多个字段。数据中的一个字段是Attribute,但它当前是一个字符串。如何将其更改为字符串列表 我尝试过使用json_构建_数组,但没有任何运气 例如,我希望我的jsonb看起来像:Sql 在Postgres中修改Jsonb内的字段,sql,arrays,json,postgresql,jsonb,Sql,Arrays,Json,Postgresql,Jsonb,我正在浏览PostgresJSONB文档,但找不到解决我遇到的一个小问题的方法 我有一张桌子:我的桌子 其中包含以下列: 用户、名称、数据和购买的 需要注意的一点是,数据是一个jsonb,有多个字段。数据中的一个字段是Attribute,但它当前是一个字符串。如何将其更改为字符串列表 我尝试过使用json_构建_数组,但没有任何运气 例如,我希望我的jsonb看起来像: { "Id": 1, "Attributes": ["Test"] } 而不是 {
{
"Id": 1,
"Attributes": ["Test"]
}
而不是
{
"Id": 1,
"Attributes": "Test"
}
我只关心Json中的Attributes字段,而不关心任何其他字段。您可以使用jsonb_set和jsonb_build_数组实现这一点,如下所示:
jsonb_set(js, '{Attributes}', jsonb_build_array(js->> 'Attributes'))
:
请提供示例数据和预期结果。@GMB刚刚更新了问题,感谢您的回答非常感谢-您知道我如何在您提供的查询中使用我的表吗?我已将“{Id:1,Attributes:Test}”替换为我的_TABLE.data,但出现语法问题。@blazerix:select jsonb_setdata。。。从mytable中,我有以下内容:使用t作为select jsonb_setdata from public.mytable作为js select js,jsonb_setjs,“{Attributes}”,jsonb_build_arrayjs->>”Attributes“new_js from t t,但它说函数jsonb_set没有exist@blazerix:no.Just:select data,jsonb_setdata,“{Attributes}”,jsonb_build_arraydata->>“属性”来自mytable的新数据。非常感谢,这是我一直在寻找的。我将阅读更多关于jsonb_集合和jsonb_构建_数组的内容,以便有更清晰的理解。
with t as (select '{ "Dd":1, "Attributes":"Test"}'::jsonb js)
select
js,
jsonb_set(js, '{Attributes}', jsonb_build_array(js->> 'Attributes')) new_js
from t
js | new_js
:------------------------------ | :--------------------------------
{"Dd": 1, "Attributes": "Test"} | {"Dd": 1, "Attributes": ["Test"]}