sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan hentes elementer fra Json-array i PostgreSQL

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;

SQLFiddle

Desværre kan du ikke bruge noget indeks med dine data. Du skal først rette dit skema for at kunne gøre det.



  1. Django-forbindelse til postgres af docker-compose

  2. PostgreSQL 9.3:Sådan indsættes UUID med store bogstaver i tabellen

  3. Sådan opretter du bruger i Oracle og tildeler privilegier

  4. hvordan man får et resultat baseret på 10 minutters interval i mysql