sql >> Database >  >> RDS >> PostgreSQL

Hoe elementen uit de Json-array te halen in PostgreSQL

Ik weet niet zeker of je een json[] hebt (PostgreSQL-array van json waarden) getypte kolom, of een json getypte kolom, die een JSON-array lijkt te zijn (zoals in uw voorbeeld).

In beide gevallen moet u uw array uitbreiden voordat u een query uitvoert. In het geval van json[] , moet u unnest(anyarray) ; in het geval van JSON-arrays in een json getypte kolom, moet u json_array_elements(json) (en LATERAL joins -- ze zijn impliciet in mijn voorbeelden):

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

Helaas kunt u geen enkele index gebruiken bij uw gegevens. Om dat te doen, moet je eerst je schema repareren.



  1. Tabel wijzigen te traag in postgres

  2. Installeer Azure Data Studio op Ubuntu 18.04

  3. Andere db voor testen in Django?

  4. postgresql postgis Als punt binnen cirkel