Nie jestem pewien, czy masz json[]
(tablica PostgreSQL z json
wartości) wpisana kolumna lub json
wpisana kolumna, która wydaje się być tablicą JSON (jak w twoim przykładzie).
Tak czy inaczej, przed wysłaniem zapytania musisz rozszerzyć swoją tablicę. W przypadku json[]
, musisz użyć unnest(anyarray)
; w przypadku tablic JSON w json
wpisaną kolumnę, musisz użyć json_array_elements(json)
(i LATERAL
złączenia — są domniemane w moich przykładach):
select t.id,
each_section ->> 'name' section_name,
each_attribute ->> 'attrkey3' attrkey3
from t
cross join unnest(array_of_json) each_section
cross join json_array_elements(each_section -> 'attributes') each_attribute
where (each_attribute -> 'attrkey3') is not null;
-- use "where each_attribute ? 'attrkey3'" in case of jsonb
select t.id,
each_section ->> 'name' section_name,
each_attribute ->> 'attrkey3' attrkey3
from t
cross join json_array_elements(json_array) each_section
cross join json_array_elements(each_section -> 'attributes') each_attribute
where (each_attribute -> 'attrkey3') is not null;
Niestety nie możesz używać żadnego indeksu ze swoimi danymi. Aby to zrobić, musisz najpierw naprawić schemat.