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

non può estrarre elementi da uno scalare

Puoi provare uno di questi (invece dell'indirizzo 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

Il primo nasconde le righe con un formato json improprio della colonna, il secondo restituisce null per loro.

Tuttavia, il problema deriva effettivamente dal fatto che uno o più valori nella colonna non sono un array json. Puoi risolverlo facilmente con il comando:

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

Dopo questa correzione non avrai bisogno di case in jsonb_array_elements() .