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

Come convertire postgresql 9.4 jsonb in oggetto senza funzione/linguaggio lato server

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: