Usa jsonb_populate_record()
(o json_populate_record()
per json
) con un tipo di riga noto come destinazione. Puoi utilizzare una tabella temporanea per registrare un tipo per un uso ad hoc (se non puoi utilizzare un esistente tabella o tipo composito personalizzato):
CREATE TEMP TABLE obj(a int, b int, c int, d int);
Quindi:
SELECT t.id, d.*
FROM test t
, jsonb_populate_record(null::obj, t.data) d;
Oppure usa jsonb_to_record()
(o json_to_record()
per json
) e fornire un elenco di definizioni di colonna con la chiamata:
SELECT t.id, d.*
FROM test t
, jsonb_to_record(t.data) d(a int, b int, c int, d int);
Oppure estrai e lancia ogni campo singolarmente:
SELECT id, (data->>'a')::int AS a, (data->>'b')::int AS b
, (data->>'c')::int AS c, (data->>'d')::int AS d
FROM test;
Tutti e tre funzionano per json
e jsonb
nello stesso modo. Basta utilizzare la rispettiva variante di funzione.
Correlati: