Ik weet niet zeker of je een json[]
hebt (PostgreSQL-array van json
waarden) getypte kolom, of een json
getypte kolom, die een JSON-array lijkt te zijn (zoals in uw voorbeeld).
In beide gevallen moet u uw array uitbreiden voordat u een query uitvoert. In het geval van json[]
, moet u unnest(anyarray)
; in het geval van JSON-arrays in een json
getypte kolom, moet u json_array_elements(json)
(en LATERAL
joins -- ze zijn impliciet in mijn voorbeelden):
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;
Helaas kunt u geen enkele index gebruiken bij uw gegevens. Om dat te doen, moet je eerst je schema repareren.