Puede probar uno de estos (en lugar de 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
El primero oculta filas con formato json incorrecto de la columna, el segundo da null
para ellos.
Sin embargo, el problema en realidad se debe a que uno o más valores en la columna no son una matriz json. Puedes arreglarlo fácilmente con el comando:
update contact
set addresses = '[null]'
-- or
-- set addresses = '[{"PostCode": null}]'
where jsonb_typeof(addresses) <> 'array' or addresses = '[]';
Después de esta corrección, no necesitarás case
en jsonb_array_elements()
.