sql >> Databasteknik >  >> RDS >> PostgreSQL

kan inte extrahera element från en skalär

Du kan prova en av dessa (istället för 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

Den första döljer rader med felaktigt json-format för kolumnen, den andra ger null för dem.

Men problemet beror faktiskt på att ett eller flera värden i kolumnen inte är en json-array. Du kan enkelt fixa det med kommandot:

update contact
set addresses = '[null]' 
-- or
-- set addresses = '[{"PostCode": null}]'
where jsonb_typeof(addresses) <> 'array' or addresses = '[]';

Efter denna korrigering behöver du inte case i jsonb_array_elements() .




  1. MySQL SELECT unik kolumn där annan kolumn är max

  2. Prestandapåverkan av vyn på aggregatfunktion kontra begränsning av resultatuppsättningar

  3. make MySQL-servern har skrivbehörighet i mappen \xampp\tmp

  4. Föregående/nästa knappar?