Nejsem si jistý, zda máte json[]
(PostgreSQL pole json
hodnoty) zadaný sloupec nebo json
zadaný sloupec, který vypadá jako pole JSON (jako ve vašem příkladu).
V obou případech musíte před dotazem rozbalit pole. V případě json[]
, musíte použít unnest(anyarray)
; v případě polí JSON v json
zadaný sloupec, musíte použít json_array_elements(json)
(a LATERAL
spojení -- jsou implicitní v mých příkladech):
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;
Bohužel se svými daty nemůžete použít žádný index. Chcete-li to provést, musíte nejprve opravit své schéma.