[PostgreSQL] 데이터 dump 뜨기

peace w·2026년 1월 25일

기본 덤프 명령문

pg_dump -h ${RDS ENDPOINT} -U ${DB유저명} -d ${DB명} -Fc -f ${DUMP 파일명}

\ (역슬래시)를 사용해서 엔터를 칠 수도 있다. \를 사용하는 경우에는 한줄로 입력하면 제대로 인식이 안될 수도 있으니 주의

pg_dump \
 -h ${RDS ENDPOINT} \ 
 -U ${DB유저명} \ 
 -d ${DB명} \
 -Fc \
 -f ${DUMP 파일명}

역슬래쉬 사용하여 한 줄로 입력 시
pg_dump: error: too many command-line arguments ...


삽질의 기록

1. pg_dump

실제 DB 인스턴스에 깔려있는 PostgreSQL의 버전이
덤프를 뜰 인스턴스에 깔려있는 PostgreSQL의 버전보다 높거나 같아야한다. (당연하지만...)

기존 서버를 구현할 때, 서버에 PostgreSQL을 설치를 안하고, 로컬 DB로만 붙어서 모든 걸 하다보니 나중에 덤프를 뜰 때 굉장히 곤란한 상황이 발생했다..
PostgreSQL16을 쓰고 있었는데, Amazon-Linux23에는 PostgreSQL16버전이 없었다.(못 찾았음)

sudo dnf install postgresql16 # -> X
## postgresql16을 찾을 수 없다고 뜬다.

sudo dnf install postgresql15 # -> O
## 15버전까지는 가능하다.

sudo dnf search postgresql 
## 이 명령어로 설치 가능한 postgresql을 찾을 수 있다.

Linux 23 에서 PostgreSQL16 설치 시도

그래서 PGDG(RHEL용 PostgreSQL 공식 repo)를 그대로 설치하려고 했는데

Amazon-Linux23는 RHEL/CentOS 호환이 아니라서

  • /etc/redhat-release 파일이 없다
  • 그래서 PGDG 를 그대로 설치하면 깨진다
    -> AL2023에서는 PGDG repo 방식이 공식적으로 지원되지 않았다..

그래서 Docker로 우회하여 PostgreSQL16을 설치했다.

Ubuntu 에서 PostgreSQL16 설치 시도

# https://www.postgresql.org/download/linux/ubuntu/ 
# 공식 문서 참고
sudo apt install postgresql-16 # -> O

Docker를 사용한 dump 명령문

dump를 뜰 서버 인스턴스에서 실행

docker run --rm \
  -v "$PWD:/work" \
  -e PGPASSWORD='DB비밀번호' \
  postgres:16 \
  pg_dump \
    -h ${RDS의 ENDPOINT} \
    -U ${유저명} \
    -d ${DB명} \
    -Fc \
    -f /work/${덤프파일명} ## 출력 파일 경로

$PWD: 현재 작업 디렉토리 (Present Working Directory)
/work: Docker 컨테이너 내부의 경로
:로 연결하여 호스트와 컨테이너를 연결

덤프 생성 후에는

ls -lh ${덤프파일명}

으로 파일이 제대로 생성되었는지 반드시 확인하자
(파일 용량이 0kb라면 제대로 생성되지 않은 것)

구 app 서버 -> 로컬 -> 신 app 서버
순으로 dump 파일을 옮겨준다.

내려받은 로컬에서 실행

scp -i [SSH키파일] [원본] [대상] ## 기본 구조

scp -i "C:/Users/.ssh/이전서버.key" ec2-user@[PUBLIC IP]:/home/ec2-user/[DUMP파일명] .

키파일 경로는 ""로 감싸준다.
. : 현재 디렉토리

  • ec2-user 및 ip에는 dump 파일이 존재하는 서버 인스턴스의 유저네임과 ip를 작성한다.
  • 현재 로컬 디렉토리에 dump 파일이 복사된다.

로컬에 잘 복사되었다면 아래 명령어를 실행하여 덤프 파일이 필요한 서버에 다시 옮긴다.

scp -i "C:/Users/.ssh/현재서버.key" [DUMP파일명] ubuntu@[PUBLIC IP]:/home/ubuntu/

2. pg_restore

dump 파일이 준비가 되었으면, 파일을 토대로 restore를 해야한다.

단, postgis를 사용하고 있는 DB를 옮기는 경우 restore할 서버인스턴스에서도 postgis를 사용해야만 정상적으로 restore가 된다.

pg_restore: error: could not execute query: ERROR: could not open extension control file .
.. No such file or directory Command was: CREATE EXTENSION IF NOT EXISTS postgis WITH SCHEMA ...;
pg_restore: error: could not execute query:
ERROR: extension "postgis" does not exist Command was: COMMENT ON EXTENSION postgis IS 'PostGIS geometry and geography spatial types and functions';

sudo -i -u postgres psql -d [DB명] -c "CREATE EXTENSION IF NOT EXISTS postgis;"

sudo -i -u postgres psql -d [DB명] -c "SELECT postgis_full_version();" # 확인 쿼리

postgis가 설치되어있지 않다면 해당 DB에 설치를 postgres 유저로 진행한다.(PostgreSQL 설치 시 자동으로 생성되는 슈퍼유저(superuser))

  pg_restore \
    -h 10.0.0.114 \
    -U nnzz_user \
    -d nnzz \
    --clean \
    --if-exists \
    --no-owner \
    --no-privileges \
    /work/[dump파일명]

정리

pg_dump: 백업 명령어

데이터베이스를 파일로 저장하는 명령어
기본 구조

pg_dump [옵션] -d 데이터베이스명 -f 출력파일명

주요 옵션
1. 출력 형식 (-F)
bash# 커스텀 포맷 (압축됨, 가장 많이 쓰임)

pg_dump -U postgres -d [db명] -Fc -f backup.dump

SQL 텍스트 포맷 (읽을 수 있음)

pg_dump -U postgres -d [db명] -Fp -f backup.sql

tar 포맷

pg_dump -U postgres -d [db명] -Ft -f backup.tar

2. 데이터만 / 스키마만
bash# 데이터만 백업 (테이블 구조 제외)

pg_dump -U postgres -d [db명] --data-only -f data.dump

스키마만 백업 (데이터 제외)

pg_dump -U postgres -d [db명] --schema-only -f schema.dump

3. 특정 테이블만
bash# users 테이블만 백업

pg_dump -U postgres -d [db명] -t users -f users_backup.dump

여러 테이블

pg_dump -U postgres -d [db명] -t users -t orders -f tables_backup.dump

pg_restore: 복구 명령어

커스텀 포맷(-Fc)으로 백업한 파일을 복구하는 명령어
기본 구조

bashpg_restore [옵션] -d 데이터베이스명 백업파일

주요 옵션
1. 기본 복구
bash# 전체 복구

pg_restore -U postgres -d nnzz backup.dump

2. 클린 복구 (기존 데이터 삭제 후 복구)
bash# 기존 객체 삭제 후 복구

pg_restore -U postgres -d nnzz --clean backup.dump

데이터베이스까지 새로 생성

pg_restore -U postgres -d nnzz --clean --create backup.dump

3. 특정 테이블만 복구
bash# users 테이블만 복구

pg_restore -U postgres -d nnzz -t users backup.dump

4. 병렬 처리 (빠른 복구)
bash# 4개의 작업을 동시에 실행

pg_restore -U postgres -d nnzz -j 4 backup.dump
profile
더 성장하자.

0개의 댓글