Můžete zkusit jednu z těchto možností (místo 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
První skrývá řádky s nesprávným formátem json sloupce, druhý dává null pro ně.
Problém však ve skutečnosti pramení z toho, že jedna nebo více hodnot ve sloupci není pole json. Můžete to snadno opravit příkazem:
update contact
set addresses = '[null]'
-- or
-- set addresses = '[{"PostCode": null}]'
where jsonb_typeof(addresses) <> 'array' or addresses = '[]';
Po této opravě nebudete potřebovat case v jsonb_array_elements() .