PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Extrair chave, valor de objetos json no Postgres

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

A função json_each_text() é uma função de retorno de conjunto, portanto, você deve usá-la como uma fonte de linha. A saída da função está aqui unida lateralmente para a tabela q , o que significa que para cada linha na tabela, cada (key, value) par dos data coluna é unida apenas a essa linha, de modo que a relação entre a linha original e as linhas formadas a partir do json objeto é mantido.

A tabela q também pode ser uma subconsulta muito complicada (ou um VALUES cláusula, como na sua pergunta). Na função, a coluna apropriada é usada a partir do resultado da avaliação dessa subconsulta, portanto, você usa apenas uma referência ao alias da subconsulta e à coluna (alias da) na subconsulta.