Non sono sicuro che tu abbia un json[]
(Matrice PostgreSQL di json
valori) o una colonna json
colonna digitata, che sembra essere un array JSON (come nel tuo esempio).
In ogni caso, è necessario espandere l'array prima di eseguire query. In caso di json[]
, devi usare unnest(anyarray)
; in caso di array JSON in un json
colonna digitata, è necessario utilizzare json_array_elements(json)
(e LATERAL
join -- sono impliciti nei miei esempi):
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;
Sfortunatamente, non puoi utilizzare alcun indice con i tuoi dati. Devi prima correggere il tuo schema, per farlo.