Bạn có thể thử một trong những địa chỉ này (thay vì địa chỉ 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
Cái đầu tiên ẩn các hàng có định dạng json không phù hợp của cột, cái thứ hai là null
cho họ.
Tuy nhiên, vấn đề thực sự bắt nguồn từ việc một hoặc nhiều giá trị trong cột không phải là một mảng json. Bạn có thể dễ dàng sửa nó bằng lệnh:
update contact
set addresses = '[null]'
-- or
-- set addresses = '[{"PostCode": null}]'
where jsonb_typeof(addresses) <> 'array' or addresses = '[]';
Sau khi sửa chữa này, bạn sẽ không cần case
trong jsonb_array_elements()
.