COPY 문을 사용하여 PostgreSQL 테이블을 덤프하려고합니다. 나올 때 열 중 하나에서 변환을 수행해야하기 때문에 pg_dump 대신 COPY를 사용하고 있습니다.postgres 오류가 발생하는 Windows에서 COPY (...) TO PROGRAM 오류
내가 실행하고자하는 문은 기본적으로이
COPY (SELECT 'punt') TO PROGRAM '7z a -si C:/Users/Public/Documents/punt';
하지만 나는 일반 오류
ERROR: program "7z a -si C:/Users/Public/Documents/punt" failed
DETAIL: child process exited with exit code 1
을 얻고있다
나는에 the fourth example 유사한 7zip과를 통해 COPY
출력을 통과하는 것을 시도하고있다 COPY
데이터베이스가 약 130GB이므로 출력을 압축하려면 설명서를 읽고 SSD로 작업하는 것이 이상적입니다. 다음 명령은 정상적으로 작동합니다.
COPY (SELECT 'punt') TO 'C:/Users/Public/Documents/punt';
결과는 COPY 1
입니다. 나는 psql의 프롬프트에서 다음 명령을 실행하고 또한 구문 및 권한에 대한 나를 상당히 확신하게하는 작품 : 나는 cmd
파이프 라인 또는 7zip과 실행 권한에 대한 뭔가가
\! echo 'punt' | 7z a -si C:/Users/Public/Documents/punt
건가요?
편집 : 포스트 그레스 버전은 아직도 크레이그 링어의 답변에 따라 NETWORK SERVICE
에 대한 디렉토리 권한을 변경 한 후 같은 오류를 받고 있어요 9.3.3
입니다. 그러나 이것은 문제를 해결하지 못했고 오류는 동일합니다. Everyone
으로 모든 권한을 부여하는 대상 디렉토리의 권한을 변경 한 후에도 동일한 오류가 발생합니다. 또한 7zip 실행 파일과 7zip Program Files
디렉터리에 대한 사용 권한을 변경하려고 시도했습니다.
이 실험에서, 내가 실행 한 방정식에서 복사본에서 입력을 고려하여 다음
COPY (select '1') TO PROGRAM 'echo punt | 7z a -si C:/Users/Public/Documents/punt';
과 호기심 실패 메시지를 얻었으나, 대신에 종료 코드 255와 함께하는 7zip과 has the meaning에 대한 "사용자가 중지 과정". 내 자신을위한 이유를 찾을 수 없습니다.
'\!'는'COPY ... PROGRAM' 명령이 명령의 종료 상태를보고하거나 신경 쓰지 않습니다. 마지막 예제에서 실제로 작동하는지 확신합니까? – jjanes
@jjanes 확실히 그렇습니다. 명령 앞에는'punt.7z'가 존재하지 않으며 명령 뒤에 있습니다. 사실, 명령 줄에서 곧바로 실행할 때 출력과 똑같은'\! '를 통해 출력을 보았습니다. – FLGMwt