Vous pouvez essayer l'une d'entre elles (au lieu de l'adresse 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
Le premier masque les lignes avec un format json incorrect de la colonne, le second donne null
pour eux.
Cependant, le problème vient en fait du fait qu'une ou plusieurs valeurs de la colonne ne sont pas un tableau json. Vous pouvez facilement le réparer avec la commande :
update contact
set addresses = '[null]'
-- or
-- set addresses = '[{"PostCode": null}]'
where jsonb_typeof(addresses) <> 'array' or addresses = '[]';
Après cette correction, vous n'aurez plus besoin de case
dans jsonb_array_elements()
.