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

kan ikke udtrække elementer fra en skalar

Du kan prøve en af ​​disse (i stedet for jsonb_array_elements(t.addresses) address ):

jsonb_array_elements(
    case jsonb_typeof(addresses) 
        when 'array' then addresses 
        else '[]' end
    ) as address
-- or
jsonb_array_elements(
    case jsonb_typeof(addresses) 
        when 'array' then addresses 
        else '[{"PostCode": null}]' end
    ) as address

Den første skjuler rækker med ukorrekt json-format af kolonnen, den anden giver null for dem.

Men problemet stammer faktisk fra, at en eller flere værdier i kolonnen ikke er et json-array. Du kan nemt rette det med kommandoen:

update contact
set addresses = '[null]' 
-- or
-- set addresses = '[{"PostCode": null}]'
where jsonb_typeof(addresses) <> 'array' or addresses = '[]';

Efter denne rettelse behøver du ikke case i jsonb_array_elements() .




  1. Postgres LEFT JOIN med SUM, manglende poster

  2. WIDE tabeller mysql

  3. Hent primær nøglekolonne i en tabel i Oracle

  4. Spatial Index bliver ikke brugt