PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

tidak dapat mengekstrak elemen dari skalar

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MASUKKAN KE ... DARI PILIH ... MENGEMBALIKAN pemetaan id

  2. Bagaimana cara menemukan kueri yang mendasari tampilan terwujud yang saya buat?

  3. Menggunakan pg_dump untuk hanya mendapatkan pernyataan penyisipan dari satu tabel dalam database

  4. Temukan ukuran byte baris di PostgreSQL

  5. Bagaimana saya mendapatkan psycopg2 logging dari waktu eksekusi kueri?