Postgres - 从 jsonb 数组中删除元素

Postgres - remove element from jsonb array

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

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

但是我只想通过id删除消息,因为获取消息需要我再次查询。

假设缺少信息:

  • 您的 table 有一个名为 user_id 的 PK。
  • 您想要删除整个 table 中带有 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;

以下解释符合问题中提供信息的范围: