PostgreSQL에서 제목으로 CSV로 테이블을 내보내는 방법은 무엇입니까?
-
13-09-2019 - |
문제
명령 줄을 통해 CSV 파일로 제목으로 PostgreSQL 테이블을 내보내려고하지만 CSV 파일로 내보내지만 제목이 없습니다.
내 코드는 다음과 같이 보입니다.
COPY products_273 to '/tmp/products_199.csv' delimiters',';
해결책
COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
에 설명 된대로 수동.
다른 팁
PSQL 명령 줄에서 :
\COPY my_table TO 'filename' CSV HEADER
마지막에는 반콜론이 없습니다.
단지 테이블 이름 대신 선택된 열 데이터 만 얻기위한 쿼리를 작성할 수도 있습니다.
COPY (select id,name from tablename) TO 'filepath/aa.csv' DELIMITER ',' CSV HEADER;
관리자 특권으로
\COPY (select id,name from tablename) TO 'filepath/aa.csv' DELIMITER ',' CSV HEADER;
Postgres에서 파일을 작성할 권한이 없으면 명령 줄에서 쿼리를 실행할 수 있습니다.
psql -U user -d db_name -c "Copy (Select * From foo_table LIMIT 10) To STDOUT With CSV HEADER DELIMITER ',';" > foo_data.csv
이것은 작동합니다
psql dbname -F , --no-align -c "SELECT * FROM TABLE"
내가 사용하는 버전 9.5의 경우 다음과 같습니다.
COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
이 솔루션은 저를 사용하여 작동했습니다 \copy
.
psql -h <host> -U <user> -d <dbname> -c "\copy <table_name> FROM '<path to csvfile/file.csv>' with (format csv,header true, delimiter ',');"
그녀는 내가 Heroku PG 데이터베이스에 pgsl connect를 사용하여 작동하는 방법을 얻었습니다.
먼저 다음과 같이 UTF8로 인코딩하는 클라이언트를 변경해야했습니다. \encoding UTF8
그런 다음 데이터를 CSV 파일에 버렸습니다.
\copy (SELECT * FROM my_table) TO C://wamp64/www/spider/chebi2/dump.csv CSV DELIMITER '~'
CSV 파일을 좋아하지 않기 때문에 ~ Delimiter로 사용했지만 일반적으로 TSV 파일을 사용하지만 Delimiter로 ' t'를 추가 할 수는 없으므로 사용했습니다. ~ 드물게 사용되지 않는 문자이기 때문입니다.
'fileablsoutepathwihname'delimiter ','CSV 헤더;
이 U를 사용하면 데이터를 내보낼 수도 있습니다.
여기에 주어진 다른 답변이 실제로 저를 위해 일하지 않았기 때문에이 답변을 게시하고 있습니다. 나는 사용할 수 없었다 COPY
올바른 권한이 없었기 때문에 우편 문자 내에서. 그래서 나는 "내보내기 그리드 행"을 선택하고 출력을 UTF-8로 저장했습니다.
그만큼 psql
@Brian이 제공 한 버전도 다른 이유로 저에게 효과가 없었습니다. 그것이 작동하지 않는 이유는 분명히 Windows 명령 프롬프트 (Windows를 사용하고 있었음)가 인코딩 자체와 함께 중간에 가두었기 때문입니다. 나는이 오류를 계속 받았다 :
오류 : "win1252"인코딩에서 바이트 시퀀스 0x81이있는 문자 "UTF8"인코딩과 동일하지 않습니다.
내가 사용한 솔루션은 CSV 파일을 읽고 삽입 문을 내 Postgres 테이블에 직접 발행하는 짧은 JDBC 스크립트 (JAVA)를 작성하는 것이 었습니다. 이것은 효과가 있었지만 인코딩을 변경하지 않았다면 명령 프롬프트도 작동했을 것입니다.