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: