PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como obter um objeto json como coluna no postgresql?


Você não pode fazer isso "dinamicamente". Você precisa especificar as colunas que deseja ter:
select name, description, id, 
       data ->> 'tax' as tax,
       data ->> 'other_attribute' as other_attribute
from core;

Se você faz muito isso, talvez queira colocar isso em uma visualização.

Outra opção é criar um tipo de objeto no Postgres que represente os atributos em seu JSON, por exemplo.
create type core_type as (id integer, tax numeric, price numeric, code varchar);

Você pode então converter o JSON para esse tipo e os atributos correspondentes do JSON serão automaticamente convertidos em colunas:

Com o tipo acima e o seguinte JSON:{"id": "100", "tax": "4.5", "price": "10", "code": "YXCV"} você pode fazer:
select id, (json_populate_record(null::core_type, data)).*
from core;

e retornará:
id | tax  | price | code
---+------+-------+-----
 1 | 4.50 |    10 | YXCV

Mas você precisa ter certeza de que cada valor JSON pode ser convertido para o tipo do campo de objeto correspondente.

Se você alterar o tipo de objeto, qualquer consulta que o utilize será atualizada automaticamente. Assim, você pode gerenciar as colunas de seu interesse, por meio de uma definição central.