Postgresql 16 버전에서 테스트해보고 작성한 글입니다.
-U
: username-h
: host (생략 시 => localhost
)-d
: database name-n
: 덤프 받을 테이블이 포함된 스키마-p
: 포트번호 (생략 시 => 5432
)-t
: 덤프 받을 테이블 이름-F
: 덤프를 내는 방식 지정-F p
: sql 파일로 덤프 (default)-F c
: 압축한 아카이브 파일로 덤프-F d
: 디렉토리에 덤프 파일 생성-f
: 덤프 결과 파일명옵션 파라미터 중에서 -F
에 따라 다른 방식의 덤프를 지원합니다.
이 중에서 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;
방법 1. SQL 덤프
와 거의 유사하지만 다른 점이 몇가지 있습니다.
-F c
옵션 사용-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
인지, 압축 아카이브
인지에 따라
복원하는 명령어를 달리 해야합니다.
psql -f
pg_restore
가볍게 아래 예시를 보면 대충 어떻게 하는지 감이 오실 겁니다.
# 옵션 파라미터는 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
예를 들어서 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_dump -F c 로 만든 *.dump
파일을
서로 다른 postgresql 버전 대의 환경에서 pg_restore
하면 약간 씩 다르게 동작합니다.
이러한 경험을 하고 싶지 않다면 그냥 *.dump
파일로 덤프내기 보다는,
*.sql
로 덤프를 내는 것도 좋은 방법 같습니다.