【问题标题】:Append a json object to a json array将 json 对象附加到 json 数组
【发布时间】:2020-06-27 07:58:32
【问题描述】:

我在数据库中有一个 json 类型的列。它的默认值为 []。

我正在尝试向其附加一个 json 对象,并且每次更新它都会附加另一个 json 对象。

数据进来

{"name":"foo", "timestamp": 123}

数据库中的新值应该是:

[{"name":"foo", "timestamp": 123}]

对行的另一个更新:

{"name":"john", "timestamp": 234}

行中的更新值现在应该是:

[{"name":"foo", "timestamp": 123},{"name":"john", "timestamp": 234}]

我试过了:

NEW."dryWeight" = OLD."dryWeight" || NEW."dryWeight";

【问题讨论】:

  • 如果您使用 varchar 将数据存储在字符串中并从 db 中获取数据,可以随意更改,而不是再次更新

标签: postgresql postgresql-json


【解决方案1】:

|| 运算符需要右侧的数组,如果 左边也是一个数组

update the_table
   set the_column = the_column || '[{"name":"bar", "timestamp": 234}]'
where ...;

|| 仅适用于 jsonb,不适用于“普通”json

【讨论】:

  • 谢谢,这就是我现在尝试的方式:NEW."dryWeight" = OLD."dryWeight"::jsonb ||新的。“干重”::jsonb;我发送的新值也在数组中,但是更新后的值是一个只有最新对象的数组,而不是附加到数组的对象
  • || 仅适用于jsonb,不适用于json 您使用的实际数据类型是什么(应该是jsonb)。您需要向我们展示您的完整触发功能。 (edit你的问题,不要在cmets中放代码)
猜你喜欢
  • 1970-01-01
  • 2020-12-03
  • 1970-01-01
  • 2015-09-11
  • 2023-01-12
  • 2021-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多