입력 파일이 텍스트 형식 덤프 인 것 같습니다. psql을 사용하십시오


89

나는 백업을 사용하여

pg_dump db_production > postgres_db.dump

그런 다음 scp를 사용하여 localhost에 복사합니다.

이제 로컬 DB에서 가져올 때 오류가 발생합니다.

pg_restore: [archiver] input file appears to be a text format dump. Please use psql.

commad 라인을 사용하여

pg_restore -d db_development postgres_db.dump

답변:


132

로부터 pg_dump문서 :

mydb라는 데이터베이스를 SQL 스크립트 파일로 덤프하려면 다음을 수행 하십시오 .

$ pg_dump mydb > db.sql

이러한 스크립트를 newdb라는 이름의 (새로 만든) 데이터베이스에 다시로드하려면 다음을 수행 하십시오 .

$ psql -d newdb -f db.sql

데이터베이스를 사용자 지정 형식 아카이브 파일로 덤프하려면 :

$ pg_dump -Fc mydb > db.dump

데이터베이스를 디렉토리 형식 아카이브로 덤프하려면 다음을 수행하십시오.

$ pg_dump -Fd mydb -f dumpdir

newdb라는 이름의 (새로 생성 된) 데이터베이스에 아카이브 파일을 다시로드하려면 :

$ pg_restore -d newdb db.dump

로부터 pg_restore문서 :

mydb라는 데이터베이스를 사용자 지정 형식 덤프 파일에 덤프했다고 가정합니다.

$ pg_dump -Fc mydb > db.dump

데이터베이스를 삭제하고 덤프에서 다시 생성하려면 :

$ dropdb mydb
$ pg_restore -C -d postgres db.dump

2
pg_restore를 할 때 pg_restore : [archiver] 입력 파일이 텍스트 형식 덤프 인 것 같습니다. psql을 사용하십시오.
Haseeb Ahmad 2011

DB를 복원하는 데 사용하는 것은 무엇입니까?
Haseeb Ahmad 2011

66
이 질문에 대답하지 않습니다
dopatraman

1
텍스트 파일 체크 아웃에서 복원하는 방법에 대해 serverfault.com/questions/260607/…
chrs

5
IMO이 게시물에는 답변을 모호하게 만드는 너무 많은 세부 사항이 있습니다. 저자가 지적하지 못한 점은 '-F'매개 변수에 대한 pg_dump 문서가 기본 형식 ( 'p'/ 'plain')이 pg_restore에 적합하다고 말하지 않는다는 것입니다. pg_restore에서는 pg_dump를 'c', 'd'또는 't'형식과 함께 사용해야합니다.
Matt


11

나를 위해 내가 사용한 원격 호스트에서 복원하려고 할 때

psql -U username -p 5432 -h 10.10.10.1 -d database < db.dump

잘 작동했습니다. 그리고 원격이 아니라면 다음 명령이 작동했습니다.

psql -d database < db.dump

7

pg_dump호환되는 백업을 만들려면 덤프를 만들 때 / pg_restore를 사용해야합니다 .--format=custom-Fc

문서에서 :

pg_restore에 입력하기에 적합한 사용자 지정 형식 아카이브를 출력합니다.

따라서 pg_dump명령은 다음과 같습니다.

pg_dump --file /tmp/db.dump --format=custom --host localhost --dbname my-source-database --username my-username --password

그리고 당신의 pg_restore명령 :

pg_restore --verbose --clean --no-acl --no-owner --host localhost --dbname my-destination-database /tmp/db.dump

6

저에게는 이렇게 작동합니다. C : \ Program Files \ PostgreSQL \ 12 \ bin> psql -U postgres -p 5432 -d 더미 -f C : \ Users \ Downloads \ d2cm_test.sql


2
간단하고 유용한 답변!
Rax Weber

1
@RAJNISH YADAV 감사합니다.
Amit

0

-Fp와 함께 pg_dump를 사용하여 일반 텍스트 형식으로 백업하는 경우 다음 명령을 사용합니다.

cat db.txt | psql dbname

dbname이라는 이름으로 모든 데이터를 데이터베이스에 복사하려면


0

전체 DB 덤프가있는 경우 :

PGPASSWORD="your_pass" psql -h "your_host" -U "your_user" -d "your_database" -f backup.sql

그러나 별도로 보관 된 스키마가있는 경우 작동하지 않습니다. 그런 다음 .NET과 유사한 데이터 삽입 트리거를 비활성화해야합니다 pg_restore --disable-triggers. 그런 다음 이것을 사용할 수 있습니다.

cat database_data_only.gzip | gunzip | PGPASSWORD="your_pass" psql -h "your_host" -U root "your_database" -c 'SET session_replication_role = replica;' -f /dev/stdin

참고로 postgres의 매우 불행한 단점이라고 생각합니다. 덤프를 만드는 기본 방법 pg_dump은와 호환되지 않습니다 pg_restore. 그러나 몇 가지 추가 키가 있습니다. WTF?

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