sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man hämtar element från Json-arrayen i PostgreSQL

Jag är inte säker på att du har en json[] (PostgreSQL-array av json värden) kolumn, eller en json inskriven kolumn, som verkar vara en JSON-array (som i ditt exempel).

I båda fallen måste du utöka din array innan du frågar. I fallet med json[] måste du använda unnest(anyarray) ; i fallet med JSON-matriser i en json kolumn, måste du använda json_array_elements(json) (och SIDA går med -- de är implicita i mina exempel):

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

Tyvärr kan du inte använda något index med dina data. Du måste fixa ditt schema först, för att kunna göra det.



  1. mysql cte. använda med och infoga det varnar ett syntaxfel

  2. PHP &MySql kontrollera om tabellen är tom

  3. connection.select_value returnerar endast strängar i postgres med pg gem

  4. En datamodell för en opinionsbyrå