Ich bin mir nicht sicher, ob Sie einen json[]
haben (PostgreSQL-Array von json
values) typisierte Spalte oder ein json
typisierte Spalte, die ein JSON-Array zu sein scheint (wie in Ihrem Beispiel).
In jedem Fall müssen Sie Ihr Array vor der Abfrage erweitern. Im Fall von json[]
, müssen Sie unnest(anyarray)
; im Fall von JSON-Arrays in einem json
typisierte Spalte, müssen Sie json_array_elements(json)
(und LATERAL
Joins -- sie sind in meinen Beispielen implizit enthalten):
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;
Leider können Sie keinen Index mit Ihren Daten verwenden. Dazu müssen Sie zuerst Ihr Schema reparieren.