Не съм сигурен, че имате json[]
(PostgreSQL масив от json
стойности) въведена колона или json
въведена колона, която изглежда като JSON масив (както във вашия пример).
И в двата случая трябва да разширите своя масив, преди да направите заявка. В случай на json[]
, трябва да използвате unnest(anyarray)
; в случай на JSON масиви в json
въведена колона, трябва да използвате json_array_elements(json)код>
(и LATERAL
се присъединява -- те се подразбират в моите примери):
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;
За съжаление не можете да използвате никакъв индекс с вашите данни. Първо трябва да поправите схемата си, за да направите това.