Anda dapat mencoba salah satu dari ini (bukan 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
Yang pertama menyembunyikan baris dengan format kolom json yang tidak tepat, yang kedua memberikan null
untuk mereka.
Namun, masalahnya sebenarnya berasal dari bahwa satu atau lebih nilai dalam kolom bukanlah array json. Anda dapat dengan mudah memperbaikinya dengan perintah:
update contact
set addresses = '[null]'
-- or
-- set addresses = '[{"PostCode": null}]'
where jsonb_typeof(addresses) <> 'array' or addresses = '[]';
Setelah koreksi ini, Anda tidak perlu case
di jsonb_array_elements()
.