Sie können eine dieser (anstelle von jsonb_array_elements(t.addresses) address
) versuchen ):
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
Die erste blendet Zeilen mit falschem json-Format der Spalte aus, die zweite gibt null
zurück für sie.
Das Problem rührt jedoch tatsächlich daher, dass ein oder mehrere Werte in der Spalte kein JSON-Array sind. Sie können es einfach mit dem Befehl beheben:
update contact
set addresses = '[null]'
-- or
-- set addresses = '[{"PostCode": null}]'
where jsonb_typeof(addresses) <> 'array' or addresses = '[]';
Nach dieser Korrektur brauchen Sie case
nicht mehr in jsonb_array_elements()
.