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

Come ottenere un oggetto json come colonna in postgresql?

Non puoi farlo "dinamicamente". Devi specificare le colonne che vuoi avere:

select name, description, id, 
       data ->> 'tax' as tax,
       data ->> 'other_attribute' as other_attribute
from core;

Se lo fai spesso, potresti volerlo mettere in una vista.

Un'altra opzione è creare un tipo di oggetto in Postgres che rappresenti gli attributi nel tuo JSON, ad es.

create type core_type as (id integer, tax numeric, price numeric, code varchar);

Puoi quindi trasmettere il JSON a quel tipo e gli attributi corrispondenti del JSON verranno automaticamente convertiti in colonne:

Con il tipo sopra e il seguente JSON:{"id": "100", "tax": "4.5", "price": "10", "code": "YXCV"} puoi fare:

select id, (json_populate_record(null::core_type, data)).*
from core;

e tornerà:

id | tax  | price | code
---+------+-------+-----
 1 | 4.50 |    10 | YXCV

Ma devi assicurarti che ogni valore JSON può essere cast al tipo del campo oggetto corrispondente.

Se modifichi il tipo di oggetto, qualsiasi query che lo utilizza verrà automaticamente aggiornata. Potrai così gestire le colonne che ti interessano, attraverso una definizione centrale.