2012-04-09 35 views
8

Tôi muốn sử dụng chức năng COPY trong PostgreSQL để nhập tệp CSV vào cơ sở dữ liệu PostgreSQL.Chức năng COPY trong PostgreSQL

Trường hợp tên tệp trong documentation, tệp CSV phải được lưu trữ ở một vị trí cụ thể hoặc có thể lưu trữ ở bất kỳ vị trí nào.

Ví dụ: copy data_table from '/tmp/outputdata.csv' WITH DELIMITER AS ',' CSV QUOTE AS '"';. Trường hợp nó nói tmp, điều đó có nghĩa là thư mục tmp trong ổ C :. Có thể thay đổi tên thư mục khác không?

Trả lời

15

Có vẻ như bạn đang nhầm lẫn bởi Linux so với Windows file-con đường ký hiệu. Những gì bạn có ở đó là một con đường Linux được neo vào thư mục gốc. Windows sử dụng các ký tự ổ đĩa - mà bạn có thể chỉ định cũng giống như khi bạn đang chạy trên Windows.

Nếu bạn sử dụng ký hiệu Windows, hãy lưu ý rằng bạn phải thoát dấu chéo ngược nếu bạn không sử dụng standard_conforming_strings = on - đây là mặc định trong phiên bản mới nhất 9.1 nhưng không có trong các phiên bản cũ hơn. Như thế này:

COPY data_table from E'C:\\tmp\\outputdata.csv' WITH ... 

Làm việc trong mọi trường hợp.
Với standard_conforming_strings = on bạn cũng có thể viết:

COPY data_table from 'C:\tmp\outputdata.csv' WITH ... 

Lưu ý rằng một máy chủ PostgreSQL Windows cũng hiểu ký hiệu đường dẫn mặc định với dấu gạch chéo thay vì dấu xồ nguợc.

Đối với SQL COPY FROM/TO, bạn có thể sử dụng bất kỳ đường dẫn nào mà chủ sở hữu quy trình máy chủ (theo mặc định là postgres) có quyền đọc/ghi.

Lưu ý rằng đối với lệnh \copy meta của trình khách psql, quyền của người dùng cục bộ hiện tại được áp dụng.

+0

Cảm ơn bạn đã giải thích. – Jeiman

+0

Không sử dụng lệnh COPY với pgAdmin trên máy Windows và thử đọc một tệp từ môi trường Windows cục bộ của bạn. Điều này sẽ thất bại. Bạn có thể nhập tệp csv. Sử dụng GUI để làm điều đó. Nhấp chuột phải vào bảng mong muốn và chọn nhập… – R13e

5

Có, tất nhiên bạn có thể chỉ định bất kỳ vị trí nào bạn có quyền truy cập đọc. Không có vấn đề gì khi thay đổi đường dẫn của tệp.

Giữ sự chú ý duy nhất trên thực tế là trên cửa sổ bạn phải thoát khỏi dấu chéo ngược theo cách này:

copy data_table from 'c:\\Temp\\outputdata.csv' WITH DELIMITER AS ',' CSV QUOTE AS '"'; 
Các vấn đề liên quan