当前位置: 首页 > 知识库问答 >
问题:

修改Postgres中Jsonb内部的字段

齐雅畅
2023-03-14

我正在通过Postgres Jsonb留档,但无法找到一个小问题的解决方案,我有。

我有一张桌子:MY_TABLE

具有以下列:

用户、姓名、数据和购买

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

我曾尝试使用json\u build\u数组,但没有任何运气

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

   {
       "Id": 1,
       "Attributes": ["Test"]

   }

而不是

{
    "Id": 1,
    "Attributes": "Test"

}

我只关心Json内部的“属性”字段,不关心任何其他字段。

共有1个答案

童子明
2023-03-14

您可以使用jsonb\u set()和jsonb\u build\u array()来实现这一点,如下所示:

jsonb_set(js, '{Attributes}', jsonb_build_array(js->> 'Attributes'))

DB Fiddle上的演示:

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"]}
 类似资料:
  • 问题内容: 我正在使用Postgresql 9.4,并具有一个表,带有和,如下所示: 如何在列的内部字段上将每个组作为数组返回?具体来说,我正在寻找的结果是: 试: 产量: 问题答案: 您必须使用运算符,而不是在正确的操作数是json路径时使用。试试这个: 产量:

  • 在Postgres9.5中,我无法从JSONB字段中的属性中选择非空值 我还尝试使用NotNull。 当我运行其中一个时,我收到错误42883。“错误:运算符不存在。JSONB->>布尔提示:没有与给定名称和参数类型匹配的运算符。您可能需要添加显式类型转换。”

  • 我有下面的Postgres查询,当通过psql客户端运行时可以很好地工作- 然而,当我通过创建org.hibernate.query对象来运行查询时,我得到了一个类似于这样的异常- psqlexception:错误:运算符不存在:jsonb@>字符变化提示:没有与给定名称和参数类型匹配的运算符。您可能需要添加显式类型转换。职位:144 请帮帮忙。我读了以下关于创建一个新类型的帖子,并且Hibern

  • 我正在阅读Postgres Jsonb文档,但找不到解决我遇到的一个小问题的方法。 我有一张桌子:MY_TABLE 具有以下列: 用户、名称、数据和购买 需要注意的是,“数据”是一个jsonb,有多个字段。“Data”中的一个字段是“Attribute”,但它可以保存的值不同步。我的意思是,它可以是一个字符串,一个字符串列表,一个空列表,或者只是一个空字符串。然而,我想改变这一点。 我希望允许的唯

  • 假设您正在编写一个Android项目(不是库)。所有文件都编译在一起,因此......在这种情况下使用可见性修饰符有任何意义吗?