2014-11-05 33 views
8

Tôi đang cố gắng nhập tệp .txt vào PostgreSQL. Tệp txt có 6 cột:LRI: thiếu dữ liệu cho cột khi sử dụng copy trong psql

Laboratory_Name Laboratory_ID Facility ZIP_Code  City State 

Và 213 hàng.

Tôi đang cố gắng sử dụng \copy để đưa các nội dung của tập tin này vào một bảng gọi là doe2 trong PostgreSQL sử dụng lệnh này:

\copy DOE2 FROM '/users/nathangroom/desktop/DOE_inventory5.txt' (DELIMITER(' ')) 

Nó mang lại cho tôi lỗi này:

missing data for column "facility" 

tôi đã tìm kiếm tất cả những gì cần làm khi gặp phải lỗi này và không có gì giúp được. Đã có người khác gặp phải điều này?

+1

Dữ liệu trông giống như thế nào trong tệp? (Một vài hàng giá trị của mẫu.) – khampson

Trả lời

4

Ba nguyên nhân có thể:

  1. Một hoặc nhiều dòng của tập tin của bạn chỉ có 4 ký tự trở xuống không gian (delimiter của bạn).

  2. Một hoặc nhiều ký tự khoảng trắng đã được thoát (vô tình). Có thể với dấu gạch chéo ngược ở cuối giá trị không được trích dẫn. Đối với (mặc định) text định dạng mà bạn đang sử dụng, the manual explains:

    Backslash characters (\) can be used in the COPY data to quote data characters that might otherwise be taken as row or column delimiters.

Output từ COPY TO hoặc pg_dump sẽ không biểu hiện bất kỳ những lỗi khi đọc từ một bảng với phù hợp với bố trí. Nhưng có lẽ tệp của bạn đã được chỉnh sửa hoặc là từ một nguồn khác, bị lỗi?

  1. Bạn không sử dụng tệp bạn nghĩ rằng bạn đang sử dụng. Các \copy meta-lệnh của giao diện dòng lệnh psql là một wrapper cho COPY và đọc các tập tin địa phương để khách hàng. Nếu tệp của bạn tồn tại trên máy chủ, hãy sử dụng lệnh SQL COPY để thay thế.
+0

Tôi không nghĩ đó là lần đầu tiên bởi vì tôi đã thay đổi dấu phân tách thành ',' và điều tương tự cũng xảy ra. Tôi không nghĩ rằng đó là thứ hai bởi vì tôi không có một dấu gạch chéo ngược duy nhất trong toàn bộ tập tin của tôi (tôi đã làm một tìm kiếm với ctrl-F). Nếu đó là 3rd, tôi không chắc chắn làm thế nào để sửa chữa nó. Tôi thử lệnh COPY trong GUI pgadmin và tôi nhận được lỗi này: L ERI: không thể mở tập tin "/users/nathangroom/desktop/DOE_inventory5.txt" để đọc: Quyền bị từ chối. Tôi thấy ở đâu đó trên StackOverflow sử dụng lệnh \ copy trong shell lệnh là giải pháp cho lỗi đó. – nathanmgroom

+0

@nathanmgroom: Tệp của bạn ở đâu? Máy chủ Postgres ở đâu? Khách hàng của bạn ở đâu? Ngoài ra, bạn không thể chỉ thay đổi dấu phân cách một cách tùy ý. Nó phải là tệp được sử dụng trong tệp của bạn. Đó là nó? Mặc định là một ký tự tab ở định dạng văn bản. –

+0

Các tập tin trên máy tính của tôi, tôi không biết chính xác nơi mà các máy chủ postgres và khách hàng được nhưng tôi biết rằng đó là tất cả địa phương, trên máy tính của tôi. Các máy chủ nói rằng đó là localhost 5432. Tôi đã thử nó một lần nữa sau khi lưu nó như là một csv và tôi nhận được lỗi này: LRI: cú pháp đầu vào không hợp lệ cho số nguyên: "Laboratory_ID" Mà không có ý nghĩa bởi vì có chắc chắn một số nguyên trong cột đó. – nathanmgroom

Các vấn đề liên quan