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

Cách ngăn chặn 'cú pháp nhập không hợp lệ cho kiểu json' trong Postgres, khi bản ghi chứa hỗn hợp json hoặc chuỗi

Nếu bạn muốn bỏ qua các hàng có JSON không hợp lệ, trước tiên bạn phải kiểm tra nếu văn bản là JSON hợp lệ. Bạn có thể làm điều này bằng cách tạo một hàm sẽ cố gắng phân tích cú pháp giá trị và bắt ngoại lệ cho các giá trị JSON không hợp lệ.

CREATE OR REPLACE FUNCTION is_json(input_text varchar) RETURNS boolean AS $$
  DECLARE
    maybe_json json;
  BEGIN
    BEGIN
      maybe_json := input_text;
    EXCEPTION WHEN others THEN
      RETURN FALSE;
    END;

    RETURN TRUE;
  END;
$$ LANGUAGE plpgsql IMMUTABLE;

Khi có điều đó, bạn có thể sử dụng is_json hàm trong CASE hoặc WHERE để thu hẹp các giá trị hợp lệ.

-- this can eliminate invalid values
SELECT user_data::json #> '{user,name}'
FROM users WHERE is_json(user_data);

-- or this if you want to fill will NULLs
SELECT
  CASE
    WHEN is_json(user_data)
      THEN user_data::json #> '{user,name}'
    ELSE
      NULL
  END
FROM users;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để lấy truy vấn con DISTINCT ON được sắp xếp theo một cột riêng biệt và thực hiện nó nhanh chóng?

  2. Mức độ hiệu quả khi đặt hàng theo khoảng cách (toàn bộ bảng) trong geodjango

  3. Bảng in không vừa với kích thước trang

  4. AWS Glue - Cắt ngắn bảng postgres đích trước khi chèn

  5. Cách hoạt động của to_timestamp () trong PostgreSQL