【问题标题】:Postgres - remove element from jsonb arrayPostgres - 从 jsonb 数组中删除元素
【发布时间】:2015-07-12 09:21:26
【问题描述】:

我有一个包含 id 和文本的 jsonb 元素 (jsonb[]) 数组。要删除我可以使用的元素:

UPDATE "Users" SET chats = array_remove(chats, '{"id": 2, "text": "my message"')

但我想仅通过 id 删除消息,因为获取消息将花费我另一个查询。

【问题讨论】:

  • 请提供表定义和示例值。我可以得出您正在使用 Postgres 9.4,但这也应该是您的问题。您想像示例建议的那样从所有行中删除元素,还是仅从 one 行中删除元素? idtext可以有各种组合吗?

标签: arrays postgresql sql-update jsonb


【解决方案1】:

假设缺少信息:

  • 您的表有一个名为 user_id 的 PK。
  • 您想删除整个表格中所有带有id = 2 的元素。
  • 您不想触摸其他行。
  • idchats 的每个数组中都是唯一的。

UPDATE "Users" u
SET    chats = array_remove(u.chats, d.chat)
FROM  (
   SELECT user_id, chat
   FROM   "Users", unnest(chats) chat
   WHERE  chat->>'id' = '2'
   ) d
WHERE  d.user_id = u.user_id;

以下解释与问题中提供的信息的范围相匹配:

【讨论】:

  • 谢谢,这正是我想要的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-08
  • 2022-05-25
  • 2019-09-12
  • 1970-01-01
  • 2017-03-10
相关资源
最近更新 更多