PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Estrai chiave, valore da oggetti json in Postgres

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

La funzione json_each_text() è una funzione di ritorno di un set, quindi dovresti usarla come origine di riga. L'output della funzione è qui unito lateralmente alla tabella q , il che significa che per ogni riga della tabella, ogni (key, value) coppia dai data colonna è unita solo a quella riga, quindi la relazione tra la riga originale e le righe formate da json oggetto viene mantenuto.

La tabella q può anche essere una sottoquery molto complicata (o un VALUES clausola, come nella tua domanda). Nella funzione, viene utilizzata la colonna appropriata dal risultato della valutazione di quella sottoquery, quindi si utilizza solo un riferimento all'alias della sottoquery e alla colonna (alias della) nella sottoquery.