PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So konvertieren Sie postgresql 9.4 jsonb in ein Objekt ohne funktions-/serverseitige Sprache

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: