Verwenden Sie jsonb_populate_record()
(oder json_populate_record()
für json
) mit einem bekannten Zeilentyp als Ziel. Sie können eine temporäre Tabelle verwenden, um einen Typ für die Ad-hoc-Verwendung zu registrieren (wenn Sie keine vorhandene verwenden können Tabelle oder benutzerdefinierter zusammengesetzter Typ):
CREATE TEMP TABLE obj(a int, b int, c int, d int);
Dann:
SELECT t.id, d.*
FROM test t
, jsonb_populate_record(null::obj, t.data) d;
Oder Verwenden Sie jsonb_to_record()
(oder json_to_record()
für json
) und liefern eine Spaltendefinitionsliste mit dem Aufruf:
SELECT t.id, d.*
FROM test t
, jsonb_to_record(t.data) d(a int, b int, c int, d int);
Oder jedes Feld extrahieren und werfen einzeln:
SELECT id, (data->>'a')::int AS a, (data->>'b')::int AS b
, (data->>'c')::int AS c, (data->>'d')::int AS d
FROM test;
Alle drei funktionieren für json
und jsonb
wie. Verwenden Sie einfach die jeweilige Funktionsvariante.
Verwandte: