pg_dump 및 pg_restore : 입력 파일이 유효한 아카이브가 아닙니다 file does not appear to be

한 컴퓨터에서 pg_dump를 사용하고 결과 파일을 다른 컴퓨터에 복사하여 복원하려고했습니다. 나는 스키마가 같다고 생각합니다. 그러나 나는 얻는다 :

pg_restore: [archiver] input file does not appear to be a valid archive

다음 작업을 수행했습니다.

pg_dump -a -f db.txt dbname

과:

pg_restore -a -d dbname db.txt

무엇이 잘못 되었나요?



답변

psql에 피드하도록 설계된 일반 SQL 형식으로 덤프하고 있습니다. pg_restore에서 인식되지 않습니다.

cat db.txt | psql dbname

트릭을해야합니다


답변

pg_dump기본적으로 데이터를 다시 작성하는 데 필요한 SQL 명령이 작성됩니다. 파일을 복구하려면 파일을 input 으로 호출 psql하지 않아야 pg_restore합니다. pg_restore이진 (기본값은 아니지만 일반적으로 권장되지 않음 ) 형식 에만 사용됩니다 pg_dump. 문서를 읽으십시오 .

업데이트 : 함께 사용되는 pg_dump이진 형식 ( -Fc -Ft) pg_restore은 정상이며 약간의 추가 유연성을 제공합니다. 그러나 표준 (SQL이 아닌)이 적고 일부 도구 (예 : php frontend)에서 가져 오기에 적합하지 않거나 텍스트 편집기로 조작하기가 쉽지 않으며 다른 버전 및 다른 데이터베이스에도 이식성이 떨어집니다. 백업의 경우 기본 일반 형식을 사용합니다. 다른 시나리오의 경우 binary + pg_restore 옵션은 동일하거나 더 적합 할 수 있습니다.

유지해야 할 점은 일반적인 시나리오 에서 Postgresql 에서 백업은 일반적으로 pg_dump (일반)에 의해 수행되고 표준 명령 행 클라이언트 ( psql )에 의한 복원 이 수행된다는 것 입니다.


답변

--format=c옵션을 전달해보십시오 pg_dump. 이를 pg_restore복원 할 수 있습니다.


답변

이것이 이전 데이터베이스를 백업하고 복원하는 것입니다.

데이터베이스를 백업하려면

pg_dump --format=c olddb_name > db_dump_file.dump

해당 백업을 복원하려면

pg_restore -v -d newdb_name db_dump_file.dump

pg_dumppg_restore대해서 더 읽어보세요.


답변

Windows 사용자의 경우

type db.txt | psql --username="YOURNAME" dbname

매력처럼 작동


답변

당신은 MySQL의 SOURCE명령에 뭔가를 할 수 있습니다 :

psql dbname

그런 다음 postgresql 터미널에서

\i filename


답변

고양이 dumpFileName | psql -h ip -d dbName -U 사용자 이름 -W