Supondo que faltam informações:
- Sua tabela tem um PK chamado
user_id
. - Você deseja remover todos os elementos com
id = 2
em toda a mesa. - Você não quer tocar em outras linhas.
id
é único dentro de cada array dechats
.
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;
A explicação a seguir corresponde à extensão das informações fornecidas na pergunta: