pg_restore : [archiver]가 파일 헤더에서 마술 문자열을 찾지 못했습니다


13

PostgreSQL 9.1을 사용하고 있으며 pg_dump다음으로 생성 된 백업 파일을 복원하려고합니다 .

sudo pg_dump -h 127.0.0.1 -U postgres --clean --inserts -E UTF8 -f out.sql database_name

이 명령은 기존 데이터베이스 객체를 삭제하는 것으로 시작하여 유효한 모든 sql 파일을 생성 한 다음 모든 테이블을 생성하고, indize, sequence 등을 생성하고 데이터를 삽입합니다.

생성 된 백업 파일을 다음과 같이 복원하려고하면 (줄 바꿈은 표시 목적으로 만 추가됨)

sudo pg_restore 
    -d database_name -h 127.0.0.1 -U postgres
    --format=c --clean --create out.sql

실패하고 인쇄합니다.

pg_restore: [archiver] did not find magic string in file header

그 이유는 무엇입니까?

답변:


19

로 복원 pg_restore --format=c ...중이지만은 ( pg_dump는) --format=c기본적으로 일반 형식 으로 수행 되었습니다.

에서 pg_dump맨 :

  -F format, --format=format
       Selects the format of the output.  format can be one of the
       following:

       p, plain
           Output a plain-text SQL script file (the default).

일반 형식의 덤프는 psql명령 행 도구 에 직접 공급되어야하며 pg_restore이것이 무엇인지 모릅니다.이 오류 메시지의 이유는 파일 헤더에서 마법 문자열을 찾지 못했습니다 .

more out.sql쉘에서 덤프 파일을 직접 보면 읽을 수있는 SQL 명령이 표시됩니다. 로 복원하십시오 psql -f out.sql [other options]. --create옵션이 pg_dump호출에 없으므로 대상 데이터베이스를 먼저 작성하려고합니다 .

반면에 --format=c옵션에 추가하여 덤프를 다시 호출 할 수 있습니다. 그런 다음 반대가 pg_restore됩니다. 사용자 정의 형식으로 덤프 파일을 해석하는 데 사용해야합니다.


0

가능한 문제 중 하나는 데이터 파일이 잘린 것입니다. 파일 크기를 비교하여 전체 파일을 다운로드하고 있는지 확인하십시오.


0

git-lfs를 사용하는 경우 포인터가 아닌 실제 파일이 있어야합니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.