PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

nie można wyodrębnić elementów ze skalara

Możesz spróbować jednego z tych (zamiast 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

Pierwsza ukrywa wiersze z niewłaściwym formatem json kolumny, druga daje null dla nich.

Jednak problem w rzeczywistości wynika z tego, że co najmniej jedna wartość w kolumnie nie jest tablicą json. Możesz to łatwo naprawić za pomocą polecenia:

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

Po tej korekcie nie będziesz potrzebować case w jsonb_array_elements() .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak używać identyfikatorów UUID w SQLAlchemy?

  2. Ustawianie nazwy schematu w postgresie za pomocą R

  3. Wyszukiwanie pełnotekstowe w podłańcuchach w PostgreSQL

  4. SQLAlchemy:Jakiekolwiek ograniczenie sprawdzające jedną z dwóch kolumn nie ma wartości NULL?

  5. Nowo przypisana sekwencja nie działa