[PostgreSQL] dump & restore

식빵·2025년 1월 15일
0

postgresql-memo

목록 보기
36/36

Postgresql 16 버전에서 테스트해보고 작성한 글입니다.


🍞 pg_dump 로 덤프내기


옵션 파라미터

  • -U : username
  • -h : host (생략 시 => localhost)
  • -d : database name
  • -n : 덤프 받을 테이블이 포함된 스키마
  • -p : 포트번호 (생략 시 => 5432)
  • -t : 덤프 받을 테이블 이름
  • -F : 덤프를 내는 방식 지정
    • -F p : sql 파일로 덤프 (default)
    • -F c : 압축한 아카이브 파일로 덤프
    • -F d : 디렉토리에 덤프 파일 생성
  • -f : 덤프 결과 파일명

옵션 파라미터 중에서 -F 에 따라 다른 방식의 덤프를 지원합니다.
이 중에서 SQL 파일로 덤프, 압축한 아카이브 파일로 덤프 를 만드는 방법만 보도록 하겠습니다.



방법 1. SQL 덤프

### 형식:
# pg_dump -U [사용자 명] -h [호스트] -d [데이터베이스] -n [스키마] -p [포트번호] \
#	-t [(스키마).테이블 명]
#   -f [덤프 결과 파일명].sql;

### 예시:
pg_dump -U postgres -h localhost -d postgres -n public -p 5432 \
	-t public.tl_scco_ctprvn \
    -f tl_scco_ctprvn.sql;



방법 2. 압축 아카이브 덤프

방법 1. SQL 덤프 와 거의 유사하지만 다른 점이 몇가지 있습니다.

  1. -F c 옵션 사용
  2. -f*.sql 이 아닌 다른 확장자 사용 (헷갈림 방지용)

### 형식:
# pg_dump -U [사용자 명] -h [호스트] -d [데이터베이스] -n [스키마] -p [포트번호] -F c \
#	-t [(스키마).테이블 명]
#   -f [덤프 결과 파일명].dump;


### 예시:
pg_dump -U postgres -h localhost -d postgres -n public -p 5432 \
	-F c \
	-t public.tl_scco_ctprvn_202412 \
	-f tl_scco_202412_bck.dump;

개인적으로는 압축 아카이브 방식이 더 좋은 거 같습니다.
SQL 로 덤프 낼 때보다 파일 크기가 확연히 작아집니다.



보충:

여러 테이블을 하나의 덤프 파일로!

-t 옵션을 연달아서 작성하면 됩니다.

## SQL 덤프
pg_dump -U postgres -h localhost -d postgres -n public -p 5432 \
	-t public.tl_scco_ctprvn \
	-t public.tl_scco_sig \
    -t public.tl_scco_emd \
    -t public.tl_scco_li \
	-f total_bck.sql;

## 압축 아카이브 덤프 방식도 똑같이 동작합니다!



특정 스키마 전체를 덤프 내기

-t 옵션을 전부 빼고, -n 옵션만 정확히 명시하면 됩니다.

pg_dump -U postgres -h localhost -d dump -p 5432 -n public -F c -f dump_public.dump





🍞 덤프 복원하기


덤프 결과물이 SQL 인지, 압축 아카이브 인지에 따라
복원하는 명령어를 달리 해야합니다.

  • sql 덤프 : psql -f
  • 아카이브 덤프 : pg_restore

가볍게 아래 예시를 보면 대충 어떻게 하는지 감이 오실 겁니다.

SQL 덤프 복원

# 옵션 파라미터는 pg_dump 와 유사합니다.
psql -U postgres -d postgres -h localhost -p 5432 -f total_dump.sql

아카이브 덤프 복원

# 옵션 파라미터는 pg_dump 와 유사합니다.
pg_restore -U postgres -d postgres -h localhost -p 5432 \
test_tl_scco_202412.dump




주의사항!

pg_dump -F c 사용 시 버전 호환성 조심!

예를 들어서 postgresql 16 환경에서 pg_dump 를 사용하여 생성한 dump 파일을
더 낮은 버전의 postgresql 환경에서 pg_restore 로 복원하려고 하면
다음과 같은 에러가 날 수도 있습니다.

pg_restore: error: unsupported version (1.15) in file header

이런 에러가 나질 않길 바라신다면 pg_restore 명령어를 사용하는 postgresql 데이터베이스의
버전과 똑같은 버전의 postgresql 이미지를 docker 로 pull 받고,

pull 받은 이미지를 실행시켜서 docker exec 로 컨테이너 내부에 들어가서
pg_dump 명령어를 사용하시면 됩니다.



버전에 따라 다른 pg_restore 동작방식

제 경험상 pg_dump -F c 로 만든 *.dump 파일을
서로 다른 postgresql 버전 대의 환경에서 pg_restore 하면 약간 씩 다르게 동작합니다.

이러한 경험을 하고 싶지 않다면 그냥 *.dump 파일로 덤프내기 보다는,
*.sql 로 덤프를 내는 것도 좋은 방법 같습니다.



참고 링크


profile
백엔드 개발자로 일하고 있는 식빵(🍞)입니다.

0개의 댓글

관련 채용 정보