PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

không thể trích xuất các phần tử từ một đại lượng vô hướng

Bạn có thể thử một trong những địa chỉ này (thay vì địa chỉ 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

Cái đầu tiên ẩn các hàng có định dạng json không phù hợp của cột, cái thứ hai là null cho họ.

Tuy nhiên, vấn đề thực sự bắt nguồn từ việc một hoặc nhiều giá trị trong cột không phải là một mảng json. Bạn có thể dễ dàng sửa nó bằng lệnh:

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

Sau khi sửa chữa này, bạn sẽ không cần case trong 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. Không thể xác định tên nhà cung cấp cho nhà máy của nhà cung cấp thuộc loại 'Npgsql.NpgsqlFactory'

  2. Hiệu suất loại UUID PostgreSQL

  3. Cách chèn hàng loạt chỉ hàng mới trong PostreSQL

  4. Làm cách nào để chỉ định mật khẩu cho 'psql' không tương tác?

  5. sử dụng bí danh kết hợp trong một điều kiện:kết hợp (tối đa (trường hợp khi giá trị sau đó là giá trị) làm bí danh