sql >> Base de Datos >  >> RDS >> PostgreSQL

Extraer clave, valor de objetos json en Postgres

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

La función json_each_text() es una función de devolución establecida, por lo que debe usarla como fuente de fila. El resultado de la función está aquí unido lateralmente a la tabla q , lo que significa que para cada fila de la tabla, cada (key, value) par de los data la columna se une solo a esa fila, por lo que la relación entre la fila original y las filas formadas a partir del json se mantiene el objeto.

La tabla q también puede ser una subconsulta muy complicada (o un VALUES cláusula, como en su pregunta). En la función, la columna adecuada se usa a partir del resultado de evaluar esa subconsulta, por lo que solo usa una referencia al alias de la subconsulta y la columna (alias de la) en la subconsulta.