Search

[postgreSQL] pg_dump 와 pg_restore 로 데이터베이스 백업, 복원하기

타입
개발
태그
PostgreSQL
상태
Published
생성일
2023/03/06 02:52
최종 편집 일시
2023/08/31 04:01
2 more properties

기본 전략

A 데이터베이스의 내용을 B 데이터베이스 에 복원하고 싶은 상황
A 데이터베이스와 B 데이터베이스에 직접 접속할 필요없이 pg_dump 와 pg_restore 을 사용하여 원격으로 작업할 수 있다.
1.
로컬에서 pg_dump 로 A 데이터베이스의 dump 파일을 생성
2.
생성한 dump 파일을 pg_restroe 로 B 데이터베이스에 복원
다른 데이터베이스의 경우 owner 명이 다를 수 있는데, owner 명이 다른 데이터베이스 간에 dump 와 restore 을 하면 에러가 발생한다. 따라서 owner 와 privileges 관련 SQL을 무시할 수 있는 옵션을 써주는 것이 좋다.

pg_dump

pg_dump 는 postgreSQL 데이터베이스를 dump 파일로 백업시킨다.
PGPASSWORD={비밀번호} pg_dump --host={호스트주소} --port={포트번호} --dbname={db명} --user={유저명} -Fc -v -O -x > {dump파일명}.dump
Bash
복사
PGPASSWORD={비밀번호} : 대화형으로 진행하지 않기 위해서 PGPASSWORD 환경변수 미리 사용
-Fc : 백업파일의 형식을 지정한다. -Fc 옵션은 더 빠르게 복원을 할 수 있는 압축 바이너리 형식으로 백업이 된다. ( 기본 백업파일은 일반텍스트 형식 )
-v : 백업 프로세스 중 정보 출력하는 옵션
-O : dump 파일에 owner 정보를 제외하는 옵션 ( CREATE USER 또는 GRANT 문을 제외시킴 )
-x : dump 파일에 privileges 정보를 제외하는 옵션 ( GRANT 또는 REVOKE 문을 제외시킴 )

pg_restore

pg_restore 는 dump 파일로부터 데이터베이스를 복원시킨다.
만약 pg_dump 시에 -O 와 -x 옵션을 안 붙힌 경우에는 pg_restore 시에 DCL 을 무시할 수 있는 --no-privileges, --no-owner 옵션을 사용하면 된다.
PGPASSWORD={비밀번호} pg_restore --no-privileges --no-owner --host={호스트주소} --port={포트번호} --dbname={db명} --user={유저명} -Fc {dump파일명}.dump
Bash
복사
--no-privileges : privileges 관련 정보를 복원하지 않는다.
--no-owner : owner 관련 정보를 복원하지 않는다.
-Fc : 백업파일의 타입을 명시함 ( -Fc 는 압축 바이너리 형식의 백업파일 )