1

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

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

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

4

1 回答 1

4

假设缺少信息:

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

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;

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

于 2015-05-03T04:07:46.143 回答