Jeg er ikke sikker på, at du har en json[]
(PostgreSQL-array af json
værdier) indtastet kolonne eller en json
indtastet kolonne, som ser ud til at være et JSON-array (som i dit eksempel).
I begge tilfælde skal du udvide dit array, før du forespørger. I tilfælde af json[]
, skal du bruge unnest(anyarray)
; i tilfælde af JSON-arrays i en json
indtastet kolonne, skal du bruge json_array_elements(json)
(og LATERAL
joins -- de er implicitte i mine eksempler):
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;
Desværre kan du ikke bruge noget indeks med dine data. Du skal først rette dit skema for at kunne gøre det.