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

Como converter postgresql 9.4 jsonb para objeto sem linguagem do lado da função/servidor


Use jsonb_populate_record() (ou json_populate_record() para json ) com um tipo de linha bem conhecido como destino. Você pode usar uma tabela temporária para registrar um tipo para uso ad-hoc (se você não puder usar uma tabela existente tabela ou tipo composto personalizado):
CREATE TEMP TABLE obj(a int, b int, c int, d int);

Então:
SELECT t.id, d.*
FROM   test t
     , jsonb_populate_record(null::obj, t.data) d;

Ou use jsonb_to_record() (ou json_to_record() para json ) e forneça uma lista de definição de coluna com a chamada:
SELECT t.id, d.*
FROM   test t
     , jsonb_to_record(t.data) d(a int, b int, c int, d int);

Ou extrair e converter cada campo individualmente:
SELECT id, (data->>'a')::int AS a, (data->>'b')::int AS b
         , (data->>'c')::int AS c, (data->>'d')::int AS d
FROM   test;

Todos os três funcionam para json e jsonb parecido. Basta usar a respectiva variante de função.

Relacionado: