한 컴퓨터에서 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_dump 및 pg_restore 에 대해서 더 읽어보세요.
답변
Windows 사용자의 경우
type db.txt | psql --username="YOURNAME" dbname
매력처럼 작동
답변
당신은 MySQL의 SOURCE
명령에 뭔가를 할 수 있습니다 :
psql dbname
그런 다음 postgresql 터미널에서
\i filename
답변
고양이 dumpFileName | psql -h ip -d dbName -U 사용자 이름 -W