Använd jsonb_populate_record()
(eller json_populate_record()
för json
) med en välkänd radtyp som mål. Du kan använda en tillfällig tabell för att registrera en typ för ad hoc-användning (om du inte kan använda en befintlig tabell eller anpassad sammansatt typ):
CREATE TEMP TABLE obj(a int, b int, c int, d int);
Sedan:
SELECT t.id, d.*
FROM test t
, jsonb_populate_record(null::obj, t.data) d;
Eller använd jsonb_to_record()
(eller json_to_record()
för json
) och tillhandahåll en kolumndefinitionslista med anropet:
SELECT t.id, d.*
FROM test t
, jsonb_to_record(t.data) d(a int, b int, c int, d int);
Eller extrahera och kasta varje fält individuellt:
SELECT id, (data->>'a')::int AS a, (data->>'b')::int AS b
, (data->>'c')::int AS c, (data->>'d')::int AS d
FROM test;
Alla tre fungerar för json
och jsonb
lika. Använd bara respektive funktionsvariant.
Relaterat: