Използвайте jsonb_populate_record()
(или json_populate_record()
за json
) с добре познат тип ред като цел. Можете да използвате временна таблица, за да регистрирате тип за ad-hoc употреба (ако не можете да използвате съществуваща таблица или персонализиран съставен тип):
CREATE TEMP TABLE obj(a int, b int, c int, d int);
След това:
SELECT t.id, d.*
FROM test t
, jsonb_populate_record(null::obj, t.data) d;
Или използвайте jsonb_to_record()
(или json_to_record()
за json
) и осигурете списък с дефиниции на колони с извикването:
SELECT t.id, d.*
FROM test t
, jsonb_to_record(t.data) d(a int, b int, c int, d int);
Или извличане и кастиране на всяко поле индивидуално:
SELECT id, (data->>'a')::int AS a, (data->>'b')::int AS b
, (data->>'c')::int AS c, (data->>'d')::int AS d
FROM test;
И трите работят за json
и jsonb
подобни. Просто използвайте съответния вариант на функция.
Свързани: