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

Cách bỏ qua lỗi với psql \ copy meta-command

Bạn không thể bỏ qua các lỗi mà không bỏ qua toàn bộ lệnh cho đến và bao gồm cả Postgres 14. Hiện không có cách xử lý lỗi phức tạp hơn.

\copy chỉ là một trình bao bọc xung quanh SQL COPY mà các kênh kết quả thông qua psql. Hướng dẫn sử dụng COPY :

COPY dừng hoạt động ở lỗi đầu tiên. Điều này sẽ không dẫn đến sự cố trong trường hợp COPY TO , nhưng bảng đích sẽ đã nhận được các hàng trước đó trong COPY FROM . Các hàng này sẽ không thể nhìn thấy hoặc không thể truy cập được, nhưng chúng vẫn chiếm dung lượng đĩa. Điều này có thể dẫn đến một lượng lớn dung lượng ổ đĩa bị lãng phí nếu lỗi xảy ra liên quan đến hoạt động sao chép lớn. Bạn có thể muốn gọi VACUUM để phục hồi không gian bị lãng phí.

Tôi nhấn mạnh đậm. Và:

COPY FROM sẽ phát sinh lỗi nếu bất kỳ dòng nào của tệp đầu vào chứa nhiều hơn hoặc ít cột hơn dự kiến.

COPY là một cách cực kỳ nhanh chóng để nhập / xuất dữ liệu. Việc kiểm tra và xử lý lỗi phức tạp sẽ làm chậm quá trình.

Đã có sự cố gắng thêm ghi nhật ký lỗi vào COPY trong Postgres 9.0 nhưng nó không bao giờ được cam kết.

Giải pháp

Thay vào đó, hãy sửa tệp đầu vào của bạn.

Nếu bạn có một hoặc nhiều cột bổ sung trong tệp đầu vào của mình và tệp mặt khác nhất quán , bạn có thể thêm các cột giả vào bảng của mình isa và thả chúng sau đó. Hoặc (sạch hơn với bảng sản xuất) nhập vào bảng dàn tạm thời và INSERT các cột (hoặc biểu thức) đã chọn vào bảng mục tiêu của bạn isa từ đó.

Các câu trả lời liên quan kèm theo hướng dẫn chi tiết:

  • Làm cách nào để cập nhật các hàng đã chọn với các giá trị từ tệp CSV trong Postgres?
  • Lệnh COPY:chỉ sao chép các cột cụ thể từ csv


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CTE đệ quy nối các trường với cha mẹ từ điểm tùy ý

  2. Cách so sánh các mảng trong PostgreSQL

  3. Tạo mật khẩu người dùng postgresql

  4. đặt mật khẩu trống cho người dùng PostgreSQL

  5. Chạy truy vấn với LIMIT / OFFSET và cũng nhận được tổng số hàng