Je ne suis pas sûr que vous ayez un json[]
(Tableau PostgreSQL de json
values) colonne typée, ou un json
colonne typée, qui semble être un tableau JSON (comme dans votre exemple).
Dans les deux cas, vous devez étendre votre tableau avant d'interroger. En cas de json[]
, vous devez utiliser unnest(anyarray)
; en cas de tableaux JSON dans un json
colonne typée, vous devez utiliser json_array_elements(json)
(et LATERAL
jointures -- elles sont implicites dans mes exemples) :
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;
Malheureusement, vous ne pouvez utiliser aucun index avec vos données. Pour ce faire, vous devez d'abord corriger votre schéma.