sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo obtener elementos de la matriz Json en PostgreSQL

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;

SQLFiddle

Desafortunadamente, no puede usar ningún índice con sus datos. Primero debe corregir su esquema para hacerlo.