Database/개념정리

[DataBase] PostgreSQL pg_dump 사용법 (백업 및 리스토어)

Sehyeok20 2023. 11. 1. 09:09
반응형

DB 백업 (pg_dump)

 

PostgreSQL에서 pg_dump 기능을 이용해 데이터베이스 백업하는 방법을 알아보자.

(필자는 Windows 환경에서 진행했다.)

 

먼저 프롬프트 창을 이용해 PostgreSQL에서 bin 폴더로 디렉토리를 이동한다.

경로 이동

(cd 이후에 전체 경로를 입력해서 바로 이동할 수도 있다.)

 

이후 pg_dump 기능을 사용하면 되는데 기본적인 구성은 다음과 같다.

pg_dump -h (호스트명) -U (유저명) -p (포트번호) -d (DB이름) > (덤프파일위치+파일명)

부가적으로 자세한 옵션들은 --help 명령어를 통해 확인할 수 있다.

한글 버전으로 보면

$ pg_dump --help
pg_dump 프로그램은 데이터베이스를 텍스트 파일 또는 기타
다른 형태의 파일로 덤프합니다.

사용법:
  pg_dump [옵션]... [DB이름]

일반 옵션들:
  -f, --file=FILENAME         출력 파일 이름
  -F, --format=c|t|p          출력 파일 형식(사용자 지정, tar, 일반 텍스트)
  -v, --verbose               세부 정보 표시 모드
  -Z, --compress=0-9          압축되는 형식의 압축 수준
  --lock-wait-timeout=TIMEOUT 테이블 잠금에 대한 TIMEOUT을 기다린 후 실패

  --help                      이 도움말을 표시하고 종료
  --version                   버전 정보를 출력하고 종료

출력 내용을 다루는 옵션들:
  -a, --data-only             스키마 빼고 자료만 덤프
  -b, --blobs                 Large Object들도 함께 덤프함
  -c, --clean                 다시 만들기 전에 데이터베이스 개체 지우기(삭제)
  -C, --create                데이터베이스 만드는 명령구문도 포함시킴
  -E, --encoding=인코딩       지정한 인코딩으로 자료를 덤프 함
  -n, --schema=SCHEMA         지정한 SCHEMA들 자료만 덤프
  -N, --exclude-schema=SCHEMA 지정한 SCHEMA들만 빼고 모두 덤프
  -o, --oids                  OID 포함해서 덤프
  -O, --no-owner              일반 텍스트 형식에서
                              개체 소유권 복원 건너뛰기
  -s, --schema-only           자료구조(스키마)만 덤프
  -S, --superuser=NAME        일반 텍스트 형식에서 사용할 superuser 사용자 이름
  -t, --table=TABLE           지정한 이름의 테이블들만 덤프
  -T, --exclude-table=TABLE   지정한 테이블들만 빼고 덤프
  -x, --no-privileges         액세스 권한 (grant/revoke) 정보는 덤프 안 함
  --binary-upgrade            업그레이드 유틸리티 전용
  --inserts                   COPY가 아니라 INSERT 명령으로 데이터 덤프
  --column-inserts            열 이름과 함께 INSERT 명령으로 데이터 덤프
  --disable-dollar-quoting    $ 인용 구문 사용안함 , SQL 표준 따옴표 사용
  --disable-triggers          자료만 복원할 때 트리거 사용을 안함
  --no-tablespaces            테이블스페이스 할당을 덤프하지 않음
  --role=ROLENAME             덤프 전에 SET ROLE 수행
  --use-set-session-authorization
                              SET SESSION AUTHORIZATION 명령을 ALTER OWNER 명령
                              대신 사용하여 소유권 설정

연결 옵션들:
  -h, --host=HOSTNAME      접속할 데이터베이스 서버 또는 소켓 디렉터리
  -p, --port=PORT          데이터베이스 서버의 포트 번호
  -U, --username=NAME      연결할 데이터베이스 사용자
  -w, --no-password        암호 프롬프트 표시 안 함
  -W, --password           암호 입력 프롬프트 보임(자동으로 처리함)

데이터베이스 이름을 지정하지 않았다면, PGDATABASE 환경변수값을
사용합니다.

-- 출처:https://www.devkuma.com/docs/postgresql/%EB%B0%B1%EC%97%85-pgdump/

 

위 과정을 통해 데이터베이스 백업을 실행하면 패스워드 입력 메시지가 나오고, 설정한 유저의 패스워드를 입력하면 설정한 경로에 백업된 파일이 생길 것이다.

예시
예시

 

리스토어 (psql)

 

이제 백업한 데이터베이스를 복원하는 작업을 할 것이다.

기본 옵션은 다음과 같다.

psql -h (호스트명) -U (유저명) -p (포트번호) -d (DB이름) <  (덤프파일위치+파일명)

 

pg_dump를 할 때와 마찬가지로 옵션을 입력해주면 되는데 이때 꺾쇠( < , > ) 의 방향이 dump 할 때와 반대로된다.

 

예시

테스트를 위해 임시로 test db와 test 테이블을 만들어서 백업과 리스토어를 진행했는데 문제없이 잘 되는 것을 볼 수 있다.

 

만약 리스토어 과정에서 에러가 발생할 경우는 -v ON_ERROR_STOP=1 옵션(에러 발생시 멈춤)을 주어 어떤 구문에서 에러가 발생했는지 확인하고, 해당 구문의 에러를 해결한 뒤 다시 실행하면 된다. 특히 테이블이 이미 존재한다거나, 권한을 줄 유저가 없다거나 하는 등의 기본적인 에러가 많으므로 꼼꼼히 확인할 필요가 있다.

반응형