Можете да опитате един от тези (вместо 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
Първият скрива редове с неправилен json формат на колоната, вторият дава null
за тях.
Проблемът обаче всъщност произтича от това, че една или повече стойности в колоната не са json масив. Можете лесно да го поправите с командата:
update contact
set addresses = '[null]'
-- or
-- set addresses = '[{"PostCode": null}]'
where jsonb_typeof(addresses) <> 'array' or addresses = '[]';
След тази корекция няма да имате нужда от case
в jsonb_array_elements()
.