database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Tutorials 5870 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 5870
pg_restore 사용법
작성자
김상기(ioseph)
작성일
2005-02-04 18:40ⓒ
2005-02-05 15:11ⓜ
조회수
22,484

질답란에 pg_restore 이야기 있어 잠깐 살펴보았는데,

이 멋진 프로그램이 7.1 버전부터 있었다는 것에 놀랐습니다.

 

늘 pg_dump mydb > mydb.sql ; psql -f mydb.sql mydb

이런식으로 백업과 복구를 했었는데,

pg_restore 놈이 이렇게 참한 놈이였음을 누군가가 이야기 해주었다면, :(

 

이야기 시작합니다.

 

pg_restore 명령은 pg_dump -F{c|t} 명령에 의해서 만들어진 덤프 파일을 사용합니다.

이 명령으로 거의 모든 객체를 개별적으로 복구시킬 수 있습니다.

테이블(-t), 인덱스(-I), 함수(-P), 트리거(-T)는 기본적으로 명령행 옵션으로 지정할 수 있으며, -L 명령을 이용해서 개별적으로 지정한 하나하나씩 섬세하게 복구할 수도 있습니다.

(하나 아쉬운 것은 특정 스키마(namespace) 전체를 쉽게 복구할 방법은 없네요.)

스키마(namespace)단위로 관리된다면, pg_dump 를 사용할 때, -n 옵션으로 개별적으로 덤프받으시길 바랍니다.

 

pg_restore에서 사용할 파일 만들기 예제:

pg_dump -h localhost -U postgres -Fc -f mydb.backup mydb

(mydb 데이터베이스 전체를 백업 받습니다)

pg_dump -h localhost -U postgres -Ft -f mydb.backup mydb

(윗 명령과 동일한데, mydb.backup 파일의 사이즈가 커집니다. 대신 복구할 때 압축을 풀지 않으니 좀 더 빠르겠지요)

pg_dump -h localhost -U postgres -Ft -f mydb.backup -n ioseph mydb

(mydb 데이터베이스에서 ioseph schema 영역의 자료만 백업받습니다)

pg_dump -h localhost -U postgres -Ft -f mydb.backup -t zipcode mydb

(mydb 데이터베이스에서 zipcode 테이블만 백업 받습니다)

 

다음 pg_restore 로 복구하기.

 

먼저 덤프 받은 backup 파일의 내용을 보려면, -l 옵션을 이용합니다.

 

pg_restore -l mydb.backup

 

나중에 이 내용을 기반으로 특정 부분만 따로 복구해야할 상황이면, 이 출력되는 내용을 파일로 저장해두어야합니다.

 

pg_restore -l mydb.backup > mydb.toc

또는

pg_restore -l -f mydb.toc mydb.backup

 

 

다음,

일단 데이터베이스가 없다면, 데이터베이스부터 만들어야합니다.

데이터베이스를 만드려면, 일단 접속할 수 있는 기본 데이터베이스를 지정해야합니다.

 

pg_restore -h localhost -U postgres -Ft -C -d template1 mydb.backup

(mydb 데이터베이스를 일단 만들고 mydb.backup 안에 있는 내용을 복구합니다.)

 

기본적으로 -d 옵션을 지정하지 않으면, 표준 출력으로 쿼리를 보냅니다.

pg_restore -Ft mydb.backup > mydb.sql

즉, mydb.sql 의 내용은 pg_dump mydb > mysql.sql 명령에 의해서 만들어지는 내용과 동일합니다.

즉, 이 backup 파일의 내용을 복구시키려면, -d 옵션으로 해당 데이터베이스를 지정해 주어야합니다.

 

pg_restore -h localhost -U postgres -Ft -d mydb mydb.backup

 

다음은 toc 파일을 이용한 부분 복구

 

윗 부분에서 pg_restore -l -f mydb.toc mydb.backup 명령으로 만들어진 mydb.toc 파일을 열어서

복구하지 않아도 되는 부분의 자료 맨 앞에 ; 표시를 해 두거나 그 줄을 삭제 하면 됩니다.

 

그리고,

pg_restore -h localhost -U postgres -L mydb.toc -d mydb mydb.backup

이런식으로 복구합니다.

 

마무리하며,

pg_restore 명령을 사용해보면서, 이 명령어를 내부적으로 사용하는 gui 툴을 하나 만들어도 참할 것 같다는 생각이 들더군요.

 

이 글에 대한 댓글이 총 1건 있습니다.

안녕하십니까? 

 

pg_dump에 -w 옵션을 쓰려고 하는데,,, 

(암호를 물어보지 않고 바로 백업을 할 수 있게 하려고요.) 

그런데 자꾸 fail 이 나네요. 

pg_dump -h localhost -w -U postgres -Ft -f consulmx.backup consulmx

고수님들의 조언을 부탁드립니다. 

감사합니다. 

김정호님이 2013-10-31 07:20에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
5942이기종 RDBMS에서 PostgreSQL 쪽으로 바꿀 때 참고할 점
김상기
2005-02-28
12765
5918view를 이용한 column 접근 권한 제어
김상기
2005-02-22
8737
5878initdb 없이 template1 데이터베이스 새로 만들기
김상기
2005-02-08
9652
5870pg_restore 사용법 [1]
김상기
2005-02-04
22484
5854PostgreSQL 8 : Group,User관리
조성준
2005-01-30
20571
5853PostgreSQL 8 : pg_hda.conf - 보정중 [2]
조성준
2005-01-30
11423
5845PostgreSQL 8 : Install -한글부분수정 [3]
조성준
2005-01-28
28028
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2019 DSN, All rights reserved.
작업시간: 0.075초, 이곳 서비스는
	PostgreSQL v11.5로 자료를 관리합니다