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í: