Use jsonb_populate_record()
(o json_populate_record()
para json
) con un tipo de fila conocido como destino. Puede usar una tabla temporal para registrar un tipo para uso ad-hoc (si no puede usar una existente tabla o tipo compuesto personalizado):
CREATE TEMP TABLE obj(a int, b int, c int, d int);
Entonces:
SELECT t.id, d.*
FROM test t
, jsonb_populate_record(null::obj, t.data) d;
O use jsonb_to_record()
(o json_to_record()
para json
) y proporcione una lista de definición de columna con la llamada:
SELECT t.id, d.*
FROM test t
, jsonb_to_record(t.data) d(a int, b int, c int, d int);
O extraer y emitir 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;
Los tres funcionan para json
y jsonb
similar. Simplemente use la variante de función respectiva.
Relacionado: