Sql 在Postgres中修改Jsonb内的字段

Sql 在Postgres中修改Jsonb内的字段,sql,arrays,json,postgresql,jsonb,Sql,Arrays,Json,Postgresql,Jsonb,我正在浏览PostgresJSONB文档,但找不到解决我遇到的一个小问题的方法 我有一张桌子:我的桌子 其中包含以下列: 用户、名称、数据和购买的 需要注意的一点是,数据是一个jsonb,有多个字段。数据中的一个字段是Attribute,但它当前是一个字符串。如何将其更改为字符串列表 我尝试过使用json_构建_数组,但没有任何运气 例如,我希望我的jsonb看起来像: { "Id": 1, "Attributes": ["Test"] } 而不是 {

我正在浏览PostgresJSONB文档,但找不到解决我遇到的一个小问题的方法

我有一张桌子:我的桌子

其中包含以下列:

用户、名称、数据和购买的

需要注意的一点是,数据是一个jsonb,有多个字段。数据中的一个字段是Attribute,但它当前是一个字符串。如何将其更改为字符串列表

我尝试过使用json_构建_数组,但没有任何运气

例如,我希望我的jsonb看起来像:

   {
       "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"]}