Utilisez jsonb_populate_record()
(ou json_populate_record()
pour json
) avec un type de ligne bien connu comme cible. Vous pouvez utiliser une table temporaire pour enregistrer un type pour une utilisation ad hoc (si vous ne pouvez pas utiliser un existant tableau ou type composite personnalisé) :
CREATE TEMP TABLE obj(a int, b int, c int, d int);
Ensuite :
SELECT t.id, d.*
FROM test t
, jsonb_populate_record(null::obj, t.data) d;
Ou utilisez jsonb_to_record()
(ou json_to_record()
pour json
) et fournissez une liste de définition de colonne avec l'appel :
SELECT t.id, d.*
FROM test t
, jsonb_to_record(t.data) d(a int, b int, c int, d int);
Ou extraire et diffuser chaque champ individuellement :
SELECT id, (data->>'a')::int AS a, (data->>'b')::int AS b
, (data->>'c')::int AS c, (data->>'d')::int AS d
FROM test;
Tous les trois fonctionnent pour json
et jsonb
ressemblent. Utilisez simplement la variante de fonction correspondante.
Connexe :