我有一组 jsonb
元素 (jsonb[]
),带有 id 和文本。要删除我可以使用的元素:
UPDATE "Users"SET chats = array_remove(chats, '{"id": 2, "text": "my message"')
但我只想通过 id 删除消息,因为获取消息将花费我另一个查询。
最佳答案
假设缺少信息:
- 您的表有一个名为
user_id
的 PK。 - 您想删除整个表中所有
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;
以下解释符合问题中提供信息的范围:
关于arrays - Postgres - 从 jsonb 数组中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30005584/