No estoy seguro de que tengas un json[]
(matriz PostgreSQL de json
valores) columna escrita, o un json
columna escrita, que parece ser una matriz JSON (como en su ejemplo).
En cualquier caso, debe expandir su matriz antes de realizar la consulta. En caso de json[]
, debe usar unnest(anyarray)
; en el caso de matrices JSON en un json
columna escrita, debe usar json_array_elements(json)
(y LATERAL
se une -- están implícitos en mis ejemplos):
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;
Desafortunadamente, no puede usar ningún índice con sus datos. Primero debe corregir su esquema para hacerlo.