PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

kann keine Elemente aus einem Skalar extrahieren

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() .