Вы можете сделать cross join lateral
с json_to_recordset()
:
select t.id, x.pet, x.country
from
mytable t
cross join lateral json_to_recordset(t.metadata) as x(pet text, country text)
;
Демонстрация на DB Fidde :
id | pet | country
-: | :-- | :------
1 | dog | uk
1 | cat | us
2 | cat | uk
Редактировать : Redshift не поддерживает json_to_recordset()
. Это должно работать:
select
t.id,
json_extract_path_text(json_extract_array_element_text(t.metadata, n.n), 'pet') pet,
json_extract_path_text(json_extract_array_element_text(t.metadata, n.n), 'country') country
from mytable t
cross join lateral generate_series(0, json_array_length(t.metadata) - 1) as n(n)