PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Extraire la clé, la valeur des objets json dans Postgres

SELECT q.id, d.key, d.value
FROM q
JOIN json_each_text(q.data) d ON true
ORDER BY 1, 2;

La fonction json_each_text() est une fonction de retour d'ensemble, vous devez donc l'utiliser comme source de ligne. La sortie de la fonction est ici joint latéralement au tableau q , ce qui signifie que pour chaque ligne du tableau, chaque (key, value) paire à partir des data la colonne est jointe uniquement à cette ligne, de sorte que la relation entre la ligne d'origine et les lignes formées à partir du json l'objet est maintenu.

Le tableau q peut aussi être une sous-requête très compliquée (ou un VALUES clause, comme dans votre question). Dans la fonction, la colonne appropriée est utilisée à partir du résultat de l'évaluation de cette sous-requête, vous n'utilisez donc qu'une référence à l'alias de la sous-requête et à (l'alias de) la colonne dans la sous-requête.