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()
.