demonstração passo a passo:db<>fiddle
SELECT
jsonb_object_agg(key, a) -- 5
FROM (
SELECT
mydata,
key,
jsonb_agg(a_elems.value - 'c') as a -- 3/4
FROM
mytable,
jsonb_each(mydata) elems, -- 1
jsonb_array_elements(elems.value) AS a_elems -- 2
GROUP BY mydata, key -- 4
) s
GROUP BY mydata -- 5
- Expanda os elementos JSON em uma linha cada. Isso gera duas colunas:uma para a chave e outra para o valor (o array JSON)
- Expanda a matriz JSON em uma linha cada (que separa o objeto JSON agregado do qual você deseja remover o
c
elemento) - Você pode usar o
-
operador para remover o elemento. - Para reagregar o objeto JSON original, você precisa agrupá-lo para trás.
jsonb_agg()
reagrega os arrays - Finalmente, você precisa reconstruir o objeto JSON original com
jsonb_object_agg()
usando a coluna de chave gerada anteriormente e a nova coluna de matriz.