démo étape par étape :db<>violon
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
- Développez les éléments JSON en une ligne chacun. Cela génère deux colonnes :une pour la clé et une pour la valeur (le tableau JSON)
- Développez le tableau JSON en une ligne chacun (qui sépare l'objet JSON agrégé dont vous souhaitez supprimer le
c
élément) - Vous pouvez utiliser le
-
opérateur pour supprimer l'élément. - Pour réagréger l'objet JSON d'origine, vous devez le regrouper en arrière.
jsonb_agg()
réagrège les tableaux - Enfin, vous devez reconstruire l'objet JSON d'origine avec
jsonb_object_agg()
en utilisant la colonne de clé précédemment générée et la nouvelle colonne de tableau.