원격 서버의 데이터베이스에 대한 읽기 전용 액세스 권한이 있습니다. 따라서 다음을 실행할 수 있습니다.
COPY products TO '/tmp/products.csv' DELIMITER ',';
그러나 해당 서버에는 파일을 만들거나 저장할 수있는 권한이 없으므로 로컬 컴퓨터에서이 작업을 수행해야합니다.
원격 데이터베이스에 연결할 때 원격 서버 대신 로컬 컴퓨터에 파일을 저장하는 명령을 어떻게 실행할 수 있습니까?
또는 Linux 명령을 실행하여 원격 데이터베이스에 연결하고 쿼리를 실행하고 출력을 파일로 로컬 시스템에 저장하려면 어떻게해야합니까?
답변
이미 제안 된 두 가지 접근 방식은 불필요하게 복잡해 보입니다.
그냥 사용하는 psql
내장의 \copy
단지 서버 측처럼 작동 명령, COPY
하지만 클라이언트와 사용 클라이언트 경로에 와이어 프로토콜을 통해 복사본을한다.
psql
백 슬래시 명령 이므로 뒤에 오는 세미콜론을 생략합니다. 예 :
\copy products TO '/tmp/products.csv' CSV DELIMITER ','
자세한 내용 은 명령 \copy
의 설명서psql
및 COPY
명령 문서 를 참조하십시오.
데이터를 복사 할 때 (입력하지는 않지만) 테이블 이름 대신 쿼리 와 함께 COPY
사용할 수있는 것처럼 .\copy
(SELECT ...)
몇 가지 제한된 상황에서 유용 할 수있는 대체로 열등한 대안은 다음을 사용하는 것입니다.
psql -t -P format=unaligned -P fieldsep_zero=on -c 'SELECT * FROM tablename'
그리고 사용하는 -o
파일로 출력을 작성하는 플래그 또는 쉘 출력 리디렉션. 거의 항상 \copy
이것보다 선호해야합니다.
답변
Linux 명령은 다음과 같습니다.
psql -h 127.0.0.1 -U username -o file.csv -c 'select id, name from clients;'