Du kan prøve en af disse (i stedet for 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
Den første skjuler rækker med ukorrekt json-format af kolonnen, den anden giver null
for dem.
Men problemet stammer faktisk fra, at en eller flere værdier i kolonnen ikke er et json-array. Du kan nemt rette det med kommandoen:
update contact
set addresses = '[null]'
-- or
-- set addresses = '[{"PostCode": null}]'
where jsonb_typeof(addresses) <> 'array' or addresses = '[]';
Efter denne rettelse behøver du ikke case
i jsonb_array_elements()
.