Użyj jsonb_populate_record()
(lub json_populate_record()
dla json
) z dobrze znanym typem wiersza jako docelowym. Możesz użyć tabeli tymczasowej, aby zarejestrować typ do użytku ad hoc (jeśli nie możesz użyć istniejącego tabela lub niestandardowy typ złożony):
CREATE TEMP TABLE obj(a int, b int, c int, d int);
Następnie:
SELECT t.id, d.*
FROM test t
, jsonb_populate_record(null::obj, t.data) d;
Lub użyj jsonb_to_record()
(lub json_to_record()
dla json
) i podaj listę definicji kolumn z wywołaniem:
SELECT t.id, d.*
FROM test t
, jsonb_to_record(t.data) d(a int, b int, c int, d int);
Lub wyodrębnij i rzucaj każde pole indywidualnie:
SELECT id, (data->>'a')::int AS a, (data->>'b')::int AS b
, (data->>'c')::int AS c, (data->>'d')::int AS d
FROM test;
Wszystkie trzy działają dla json
i jsonb
zarówno. Wystarczy użyć odpowiedniego wariantu funkcji.
Powiązane: