Použijte jsonb_populate_record()
(nebo json_populate_record()
pro json
) s dobře známým typem řádku jako cílem. K registraci typu pro ad-hoc použití můžete použít dočasnou tabulku (pokud nemůžete použít existující tabulka nebo vlastní složený typ):
CREATE TEMP TABLE obj(a int, b int, c int, d int);
Potom:
SELECT t.id, d.*
FROM test t
, jsonb_populate_record(null::obj, t.data) d;
Nebo použijte jsonb_to_record()
(nebo json_to_record()
pro json
) a poskytněte seznam definic sloupců s voláním:
SELECT t.id, d.*
FROM test t
, jsonb_to_record(t.data) d(a int, b int, c int, d int);
Nebo extrahovat a přenášet každá pole jednotlivě:
SELECT id, (data->>'a')::int AS a, (data->>'b')::int AS b
, (data->>'c')::int AS c, (data->>'d')::int AS d
FROM test;
Všechny tři fungují pro json
a jsonb
podobně. Stačí použít příslušnou variantu funkce.
Související: