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ợpCOPY TO
, nhưng bảng đích sẽ đã nhận được các hàng trước đó trongCOPY 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ọiVACUUM
để 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