U kunt een van deze proberen (in plaats van het 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
De eerste verbergt rijen met een onjuist json-formaat van de kolom, de tweede geeft null
voor hen.
Het probleem komt echter voort uit het feit dat een of meer waarden in de kolom geen json-array zijn. Je kunt het eenvoudig oplossen met het commando:
update contact
set addresses = '[null]'
-- or
-- set addresses = '[{"PostCode": null}]'
where jsonb_typeof(addresses) <> 'array' or addresses = '[]';
Na deze correctie heb je case
niet meer nodig in jsonb_array_elements()
.