PostgreSQL
을 이용해서 웹페이지를 만들고 있는데, 계속 소스 볼륨이 커지다보니 git branch
를 추가하면서 개발을 하고 있다. git
브랜치 생성 및 병합방법 관련 포스팅은 여기를 클릭하여 참고한다. 소스는 잘 나누어 개발하고 있는데, DB는 실제 운영중인 DB에다 계속 테스트거래를 해볼 수는 없어서, 하나의 테스트DB 환경을 하나 더 만들어 보고자 했다.
Backup and Restore
PostgreSQL 백업방법은 공식문서를 보면 3가지 방법이 있는데, 여기 포스팅에서는 SQL dump
방법만 작성해본다. pg_dump 명령어를 사용하면 되며, 백업하고자 하는 데이터베이스(여기서는 mydb
)를 기술하고, 백업파일의 이름(여기서는 dumpfile
)을 넣어주면 된다. 간단하다.
$ pg_dump mydb > dumpfile
새로 만들 테스트환경의 데이터베이스를 하나 만든다. 이름은 test
로 정했다.
$ createdb test
아까 만들어놓은 dumpfile
백업파일을 새로만든 데이터베이스 test
에다가 복원한다.
$ psql test < dumpfile
SET
SET
set_config
------------
(1 row)
CREATE SCHEMA
ALTER SCHEMA
CREATE SCHEMA
ALTER SCHEMA
CREATE EXTENSION
COMMENT
CREATE FUNCTION
ALTER FUNCTION
CREATE SEQUENCE
ALTER TABLE
CREATE SEQUENCE
ALTER TABLE
CREATE TABLE
COPY 32
COPY 18
COPY 6
COPY 8
COPY 267
COPY 34
COPY 84
setval
--------
10034
(1 row)
setval
--------
47
(1 row)
...(생략)...
데이터베이스 삭제와 복원
dropdb
명령어로 데이터베이스를 삭제할 수 있다. 다만, 커넥션이 있는 경우 아래와 같은 에러메시지를 볼 수 있다.
$ dropdb test
dropdb: error: database removal failed: ERROR: database "test" is being accessed by other users
DETAIL: There are 13 other sessions using the database.
was 를 중지하고, sql 툴도 종료하고 하면 삭제할 수 있지만, 그건 너무 귀찮고 강제삭제처리 옵션이 있으니 그걸 사용하면 된다.
dropdb 문서에 따르면, -f
옵션을 줘서 커넥션이 있더라도 강제 drop 처리를 할 수 있다.
* dropdb — remove a PostgreSQL database
-f
--force
Attempt to terminate all existing connections to the target database before dropping it. See DROP DATABASE for more information on this option.
혼자 막 사용하는 테스트계 DB 라서 아래처럼 막 지우고 다시 백업하는 것이니, 본인의 환경에 맞춰 잘 사용하면 된다.
$ pg_dump mydb > dumpfile
$ dropdb -f test
$ createdb test
$ psql test < dumpfile