글
출처 : 데이터베이스 사랑넷(http://database.sarang.net)
원본 위치 : http://database.sarang.net/?inc=read&aid=5870&criteria=pgsql&subcrit=&id=&limit=20&page=1
질답란에 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_dump로 백업하기
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 툴을 하나 만들어도 참할 것 같다는 생각이 들더군요.
[출처] PostgreSQL 백업/복구(pg_dump/pg_restore)|작성자 다크
'PostgreSQL' 카테고리의 다른 글
PostgreSQL 8.3의 내장 자료형들 (0) | 2009.08.13 |
---|---|
PostgreSQL 의 언어 사용법(PL/pgSQL) (0) | 2009.06.30 |
시스템 카탈로그와 SQL서버 벤치마크 이야기 (0) | 2009.06.30 |
SPI 와 트리거의 밀월여행 (0) | 2009.06.30 |
ECPG로 Embedded SQL 프로그래밍하기 (0) | 2009.06.30 |
RECENT COMMENT