명령 행을 사용하여 postgres 백업 파일을 복원 하시겠습니까?


294

postgresql을 처음 사용하고 로컬에서는 pgadmin3을 사용합니다. 그러나 원격 서버에는 그런 사치가 없습니다.

이미 데이터베이스 백업을 만들어 복사했지만 명령 줄에서 백업을 복원하는 방법이 있습니까? GUI 또는 pg_dumps와 관련된 것만 볼 수 있으므로 누군가이 문제를 해결하는 방법을 말해 줄 수 있다면 정말 좋을 것입니다!

답변:


366

덤프 파일 작성 방법에 따라 두 가지 도구가 있습니다.

첫 번째 참조 소스 pg_dump(1)는 덤프 자체를 작성하는 매뉴얼 페이지 여야 합니다. 그것은 말한다 :

덤프는 스크립트 또는 아카이브 파일 형식으로 출력 될 수 있습니다. 스크립트 덤프는 데이터베이스를 저장된 당시의 상태로 재구성하는 데 필요한 SQL 명령이 포함 된 일반 텍스트 파일입니다. 이러한 스크립트에서 복원하려면 psql (1)에 공급하십시오. 스크립트 파일을 사용하여 다른 시스템 및 기타 아키텍처에서도 데이터베이스를 재구성 할 수 있습니다. 다른 SQL 데이터베이스 제품에서도 일부 수정되었습니다.

데이터베이스를 재 구축하려면 대체 아카이브 파일 형식을 pg_restore (1)와 함께 사용해야합니다. 그것들은 pg_restore가 복원 된 것을 선택적으로하거나 심지어 복원되기 전에 항목을 재정렬 할 수있게합니다. 아카이브 파일 형식은 여러 아키텍처에서 이식 가능하도록 설계되었습니다.

따라서 덤프 방식에 따라 다릅니다. 우수한 file(1)명령을 사용하여 알아낼 수 있습니다. ASCII 텍스트 및 / 또는 SQL을 psql언급하면 복원해야합니다. 그렇지 않으면 사용해야합니다.pg_restore

복원은 매우 쉽습니다.

psql -U username -d dbname < filename.sql

-- For Postgres versions 9.0 or earlier
psql -U username -d dbname -1 -f filename.sql

또는

pg_restore -U username -d dbname -1 filename.dump

해당 맨 페이지를 확인하십시오. 복원 작동 방식에 영향을주는 몇 가지 옵션이 있습니다. 덤프 생성 방법에 따라 복원하기 전에 "라이브"데이터베이스를 정리하거나 주석에서 지적한대로 template0에서 데이터베이스를 다시 작성해야 할 수도 있습니다.


3
실제로 IME는 template0에서 새로 작성된 데이터베이스로 실제로 항상 복원하려고합니다. 그렇지 않으면 template1에서 plpgsql 활성화와 같은 작업을 수행 한 경우 복원 프로세스에서 다시 시도하고 -1 스위치는 전체 트랜잭션이 실패 함을 나타냅니다. 따라서 "createdb -T template0 seo2"다음에 "pg_restore -v -d seo2 seo.pg"와 같이 seo.pg (seo 데이터베이스에서 생성)를 새 seo2 데이터베이스로 복원합니다. 백업 파일이 .sql 파일 인 경우 충돌하는 비트를 손으로자를 수 있습니다.
araqnid

61
당신은 할 수 없습니다 -d-f같은 시간에. pg_restore: options -d/--dbname and -f/--file cannot be used together
CppLearner 2018

8
버전 9.2에서 "-f"옵션은 덤프 파일이 아니라 출력 파일을 지정합니다 (이전 버전에서도 동일 함).
David Resnick

4
에 관해서 cannot be used together는 여기를보십시오 : stackoverflow.com/questions/27882070/…
Abdull

3
@ Alex78191은 단일 트랜잭션으로 실행되어 완전히 실패하고 롤백하거나 통과 할 수 있음을 의미합니다. 데이터베이스에 대한 일부 액세스도 차단합니다.
ATN

216

백업 만들기

pg_dump -h localhost -p 5432 -U postgres -F c -b -v -f 
"/usr/local/backup/10.70.0.61.backup" old_db

-F c는 사용자 정의 형식 (압축되어 -j N과 병렬로 수행 가능) -b는 얼룩을 포함하고, -v는 자세하고 -f는 백업 파일 이름입니다.

백업에서 복원

pg_restore -h localhost -p 5432 -U postgres -d old_db -v 
"/usr/local/backup/10.70.0.61.backup"

-h localhost- 옵션 을 설정해야합니다.


2
이 명령을 실행하기 전에 Posgresql bin 폴더에 있어야합니다. Windows의 예 (기본 폴더에 설치 한 경우)의 경우는 것 \ 프로그램 파일 \의 PostgreSQL \ 9.6 \ 빈 : C
juan_carlos_yl

90

postgres데이터베이스에 대한 모든 권한을 가지려면 로그인해야 합니다.

su - postgres
psql -l                      # will list all databases on Postgres cluster

pg_dump / pg_restore

  pg_dump -U username -f backup.dump database_name -Fc 

전환 -F백업 파일의 형식을 지정합니다 :

  • c 압축되어 사용자 정의 PostgreSQL 형식을 사용하며 백업 파일 크기가 가장 작습니다.
  • d 각 파일이 하나의 테이블 인 디렉토리
  • t TAR 아카이브 용 (사용자 정의 형식보다 큼)
  • -h/ --host서버가 실행중인 시스템의 호스트 이름을 지정합니다.
  • -W/ --password강제 pg_dump암호 입력을 요구하도록 데이터베이스에 연결하기 전에

백업 복원 :

   pg_restore -d database_name -U username -C backup.dump

-C데이터를 가져 오기 전에 매개 변수 가 데이터베이스를 작성해야합니다. 작동하지 않으면 항상 데이터베이스를 만들 수 있습니다. 명령 사용 ( postgres데이터베이스를 작성할 권한이있는 사용자 또는 다른 계정으로)createdb db_name -O owner

pg_dump / psql

인수를 지정하지 않은 경우 -F기본 일반 텍스트 SQL 형식이 사용되었습니다 -F p. 그런 다음을 사용할 수 없습니다 pg_restore. 로 데이터를 가져올 수 있습니다 psql.

지원:

pg_dump -U username -f backup.sql database_name

복원:

psql -d database_name -f backup.sql

"psql -d database_name -f backup.sql"명령을 사용하여 DigitalOcean의 dokku에서 덤프 한 데이터베이스를 복원했습니다. 잘 했어.
NineBlindEyes

1
psql을 사용하는 동안 사용자 (예 :) postgres에 비밀번호가 설정되어 -W있으면 옵션을 사용해야합니다. 예를 들어 su postgres터미널에서 아무 것도 하지 않고 우분투 에서 $ psql -h localhost -U postgres -W -d DB_NAME < DB_BACKUP.sql로컬 호스트에서 백업을 복원하는 데 도움이되는 명령이 있습니다. 참고 -h옵션이 필요합니다.
Jignesh Gohel

@JiggneshhGohel 매뉴얼에서 말한 것처럼 : -W옵션은 절대 필수가 아닙니다. pg_dump서버에서 비밀번호 인증이 필요한 경우 비밀번호를 자동으로 묻습니다. 또한 PGPASSWORD일반 텍스트 암호를 사용하는 경우 env 변수 를 사용할 수 있습니다 . -h기본값을 PGHOST적용 할 수없는 경우 필요합니다 . 이 옵션은 많은 PostgreSQL 유틸리티에 공통적이므로이 질문에 대답 할 필요는 없습니다 (설정에 따라 크게 다름).
Tombart

@ Tombart의 두 번째 옵션 pg_dump/psql부분은 저에게 효과적입니다. 그러나 첫 번째 부분 pg_dump/pg_restore은 복원을 위해 작동하지 않습니다. 감사합니다.
Anjan Biswas 2018 년

@AnjanBiswas 첫 번째 옵션은 압축 된 아카이브를 사용하는 것으로, 더 많은 CPU가 필요하지만 백업 파일은 디스크의 공간을 덜 차지합니다. 적절한 압축을 선택하면됩니다.-Fc
Tombart

60

POSTGRESQL 9.1.12

덤프:

pg_dump -U user db_name > archive_name.sql

사용자 비밀번호를 입력하고 Enter를 누르십시오.

복원:

psql -U user db_name < /directory/archive.sql

사용자 비밀번호를 입력하고 Enter를 누르십시오.


31

아래는 pg_dump데이터베이스를 복원하는 데 사용하는 버전입니다 .

pg_restore -h localhost -p 5432 -U postgres -d my_new_database my_old_database.backup

또는 사용 psql:

psql -h localhost -U postgres -p 5432 my_new_database < my_old_database.backup

여기서 -h호스트, -p포트, -u로그인 사용자 이름, -d데이터베이스 이름


2
Govind Singh, 왜 내 답변을 편집 했습니까? 당신의 변화는 새로운 것을 가져 오지 않습니다 ..
Yahor M

1
my_new_database를 사용할 때 이미 존재해야 psql합니까?
Elmex80s

22

GZIP로 백업 및 복원

큰 데이터베이스의 경우 이것은 매우 좋습니다

지원

pg_dump -U user -d mydb | gzip > mydb.pgsql.gz

복원

gunzip -c mydb.pgsql.gz | psql dbname -U user

https://www.postgresql.org/docs/9.1/static/backup-dump.html


1
우분투의 경우 다음을 사용할 수 있습니다. gunzip -c mydb.pgsql.gz | sudo -u postgres psql데이터베이스에서 작동 할 권한을 얻으려면. 또한 --clean덤프 할 때 기존 데이터를 모두 지우는 플래그를 고려하면 유용 할 수 있습니다.
Sebastian

나를 위해 훌륭하고 깔끔한 솔루션을 사용합니다. 감사합니다!
Nam G VU

11
Backup:  $ pg_dump -U {user-name} {source_db} -f {dumpfilename.sql}

Restore: $ psql -U {user-name} -d {desintation_db} -f {dumpfilename.sql}

8

이것은 나를 위해 일했다 :

pg_restore --verbose --clean --no-acl --no-owner --host=localhost --dbname=db_name --username=username latest.dump

고마워, --no-owner정말 도움이되었습니다.
bonafernando

7

1. 터미널을 엽니 다.

다음 명령을 사용하여 데이터베이스를 2.backup

postgres 저장소-/opt/PostgreSQL/9.1/bin/

소스 데이터베이스 서버-192.168.1.111

백업 파일 위치 및 이름-/home/dinesh/db/mydb.backup

소스 DB 이름-mydatabase

/opt/PostgreSQL/9.1/bin/pg_dump --host '192.168.1.111'-포트 5432 --username "postgres"--no-password --format custom --blobs --file "/ home / dinesh / db /mydb.backup ""mydatabase "

mydb.backup 파일을 대상으로 복원합니다.

목적지 서버-localhost

대상 데이터베이스 이름-mydatabase

백업을 복원 할 데이터베이스를 작성하십시오.

/opt/PostgreSQL/9.1/bin/psql -h 'localhost'-p 5432 -U postgres -c "CREATE DATABASE mydatabase"

백업을 복원하십시오.

/opt/PostgreSQL/9.1/bin/pg_restore --host 'localhost'-포트 5432 --username "postgres"--dbname "mydatabase"--no-password --clean "/ home / dinesh / db / mydb. 지원"


4

pg_dump를 사용하여 백업을 생성하면 다음과 같은 방법으로 쉽게 복원 할 수 있습니다.

  1. 명령 행 창 열기
  2. Postgres bin 폴더로 이동하십시오. 예를 들면 다음과 같습니다. cd "C:\ProgramFiles\PostgreSQL\9.5\bin"
  3. 데이터베이스를 복원하려면 명령을 입력하십시오. For example: psql.exe -U postgres -d YourDatabase -f D:\Backup\.sql
  4. postgres 사용자의 비밀번호를 입력하십시오
  5. 복원 과정 확인

4

1) psql 터미널을 엽니 다.

2) 덤프 파일의 압축을 풀고 untar하십시오.

3) 빈 데이터베이스를 작성하십시오.

4) 다음 명령을 사용하여 .dump 파일을 복원하십시오.

<database_name>-# \i <path_to_.dump_file>




2

postgres 백업 파일 복원은 처음에 백업을 수행 한 방법에 따라 다릅니다.

pg_dump를 -F c 또는 -F d와 함께 사용한 경우 pg_restore를 사용해야합니다. 그렇지 않으면

psql -h localhost -p 5432 -U postgres <백업 파일

postgres 데이터베이스를 백업 및 복원하는 9 가지 방법


데이터베이스 이름 부분을 놓쳤으며 대상 데이터베이스가 존재하지 않는다는 불만이 있습니까?
Pere

2

다음 명령이 도움이 될 수 있는지 확인하십시오.

sudo su - yourdbuser
psql
\i yourbackupfile

2

네크로 포스트 (necropost)에 대해 유감이지만,이 해결책은 저에게 효과적이지 않았습니다. 저는 postgres 10을 사용하고 있습니다. Linux :

  1. 디렉토리를 pg_hba.conf로 변경해야했습니다.
  2. 여기에 언급 된 것처럼 피어에서 md5로 메소드를 변경하기 위해 파일을 편집해야했습니다.
  3. 서비스를 다시 시작하십시오. service postgresql-10 restart
  4. 내 backup.sql이 위치한 디렉토리를 변경하고 다음을 실행하십시오.
    psql postgres -d database_name -1 -f backup.sql

    -database_name은 내 데이터베이스 이름입니다.

    -backup.sql은 .sql 백업 파일의 이름입니다.


1

pg_dump를 실행하는 데 인증 문제가있어서 덤프 파일을 옮겼습니다.

mv database_dump /tmp

임시 디렉토리에 넣은 다음 실행

su -u postgres
cd /tmp
pg_restore database_dump

큰 데이터베이스 덤프가있는 경우 현재 사용자와 postgres 사용자가 데이터베이스 덤프 파일에 액세스하여 데이터베이스 덤프 파일을 넣을 수있는 다른 디렉토리를 만들면됩니다.


1

백업 SQL 파일이 있으면 쉽게 복원 할 수 있습니다. 아래에 주어진 지침을 따르십시오.

1. At first, create a database using pgAdmin or whatever you want (for example my_db is our created db name)
2. Now Open command line window
3. Go to Postgres bin folder. For example:  cd "C:\ProgramFiles\PostgreSQL\pg10\bin"
4. Enter the following command to restore your database: psql.exe -U postgres -d my_db -f D:\Backup\backup_file_name.sql 

필요한 경우 postgres 사용자의 비밀번호를 입력하고 Postgres가 작업을 수행하도록하십시오. 그런 다음 복원 프로세스를 확인할 수 있습니다.


0

데이터를 백업하거나 백업에서 데이터를 복원하려는 경우 다음 명령을 실행할 수 있습니다.

  1. 데이터 백업을 만들려면 postgres \ bin \ 디렉토리로 이동 C:\programfiles\postgres\10\bin\한 후 다음 명령을 입력하십시오.

    pg_dump -FC -U ngb -d ngb -p 5432 >C:\BACK_UP\ngb.090718_after_readUpload.backup
  2. 백업에서 데이터를 복원하려면 postgres \ bin \ 디렉토리로 이동 C:\programfiles\postgres\10\bin\한 다음 아래 명령을 입력하십시오.

    C:\programFiles\postgres\10\bin> pg_restore -Fc -U ngb -d ngb -p 5432 <C:\ngb.130918.backup

    백업 파일이 존재하는지 확인하십시오.


-3

아래의 작동 예를 참조하십시오

C : / Program Files / PostgreSQL / 9.4 / bin \ pg_restore.exe --host localhost --port 5432 --username "postgres"--dbname "newDatabase"--no-password --verbose

" C : \ Users \ Yogesh \ Downloads \ 새 다운로드 \ DB.backup "

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