Tôi đang cố gắng xuất bảng PostgreSQL có tiêu đề sang tệp CSV thông qua dòng lệnh, tuy nhiên tôi nhận được nó để xuất sang tệp CSV, nhưng không có tiêu đề.
Mã của tôi trông như sau:
COPY products_273 to '/tmp/products_199.csv' delimiters',';
Tôi đang cố gắng xuất bảng PostgreSQL có tiêu đề sang tệp CSV thông qua dòng lệnh, tuy nhiên tôi nhận được nó để xuất sang tệp CSV, nhưng không có tiêu đề.
Mã của tôi trông như sau:
COPY products_273 to '/tmp/products_199.csv' delimiters',';
Câu trả lời:
COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
như được mô tả trong hướng dẫn .
COPY
yêu cầu quyền quản trị viên. Sử dụng \COPY
thay thế nếu bạn gặp vấn đề.
COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
Từ dòng lệnh psql:
\COPY my_table TO 'filename' CSV HEADER
không có dấu chấm phẩy ở cuối
COPY
lệnh yêu cầu quyền truy cập của quản trị viên
psql
cách tiếp cận, người ta có thể lưu đầu ra bất cứ nơi nào người ta có quyền truy cập. Tôi chỉ sử dụng psql
cách tiếp cận để lấy dữ liệu từ một máy chủ từ xa vào một tệp cục bộ. Rất lắt léo.
pg_dump -h remote | pg_restore -h localhost
.
psql -c "\COPY (SELECT * FROM mytable) TO STDOUT" > mytable.csv
thay vì chỉ tên bảng, bạn cũng có thể viết một truy vấn để chỉ nhận dữ liệu cột được chọn.
COPY (select id,name from tablename) TO 'filepath/aa.csv' DELIMITER ',' CSV HEADER;
với đặc quyền quản trị viên
\COPY (select id,name from tablename) TO 'filepath/aa.csv' DELIMITER ',' CSV HEADER;
\COPY ...
). Và ít nhất trong phiên bản psql của tôi (9.5.2), tôi không cần chỉ định 'DELIMITER'; mặc định là dấu phẩy.
Khi tôi không được phép viết một tập tin từ Postgres, tôi thấy rằng tôi có thể chạy truy vấn từ dòng lệnh.
psql -U user -d db_name -c "Copy (Select * From foo_table LIMIT 10) To STDOUT With CSV HEADER DELIMITER ',';" > foo_data.csv
Những công việc này
psql dbname -F , --no-align -c "SELECT * FROM TABLE"
-F ,
, và dùng |
làm dấu phân cách. Cảm ơn!
COPY
tuyên bố tạo ra một tệp sẽ được sử dụng lại
Đây là cách tôi có được vỏ năng lượng hoạt động bằng cách sử dụng kết nối pgsl với cơ sở dữ liệu Heroku PG:
Trước tiên tôi phải thay đổi mã hóa máy khách thành utf8 như thế này: \encoding UTF8
Sau đó đổ dữ liệu vào tệp CSV này:
\copy (SELECT * FROM my_table) TO C://wamp64/www/spider/chebi2/dump.csv CSV DELIMITER '~'
Tôi đã sử dụng ~ làm dấu phân cách vì tôi không thích các tệp CSV, tôi thường sử dụng các tệp TSV, nhưng nó sẽ không cho phép tôi thêm '\ t' làm dấu phân cách, vì vậy tôi đã sử dụng ~ vì nó là một characeter hiếm khi được sử dụng.
sao chép (anysql truy vấn datawanttoexport) vào 'fileablsoutepathwihname' delimiter ',' csv tiêu đề;
Sử dụng u này cũng có thể xuất dữ liệu.
Tôi đang đăng câu trả lời này vì không có câu trả lời nào khác được đưa ra ở đây thực sự hiệu quả với tôi. Tôi không thể sử dụngCOPY
từ bên trong Postgres, vì tôi không có quyền chính xác. Vì vậy, tôi đã chọn "Xuất các hàng lưới" và lưu kết quả đầu ra dưới dạng UTF-8.
Các psql
phiên bản được đưa ra bởi @ Brian cũng không làm việc cho tôi, vì một lý do khác nhau. Lý do nó không hoạt động là vì rõ ràng dấu nhắc lệnh Windows (tôi đang sử dụng Windows) đã tự khắc phục xung quanh với mã hóa. Tôi liên tục nhận được lỗi này:
LRI: ký tự có chuỗi byte 0x81 trong mã hóa "WIN1252" không có tương đương trong mã hóa "UTF8"
Giải pháp tôi đã kết thúc bằng cách viết một tập lệnh JDBC ngắn (Java) đọc tệp CSV và đưa ra các câu lệnh chèn trực tiếp vào bảng Postgres của tôi. Điều này đã làm việc, nhưng dấu nhắc lệnh cũng sẽ hoạt động nếu nó không thay đổi mã hóa.
Hãy thử điều này: "COPY sản phẩm_273 TỪ '\ tmp \ sản phẩm_199.csv' DELIMITER ',' CSV Header"