※ How to use "pg_dump"?
안녕하세요. 듀스트림입니다.
오늘은 PostgreSQL에서 사용하는 논리적 백업 도구인 pg_dump에 대해 알아보겠습니다.
1. pg_dump?
pg_dump는 PostgreSQL의 논리적 백업 도구로서, SQL 명령어와 데이터를 추출해 저장합니다.
2. pg_dump의 동작 방식
pg_dump는 아래 목차와 같은 순서로 동작합니다.
2.1. 데이터베이스 접속 및 스냅샷 생성
- 접속
- pg_dump는 libpq 라이브러리를 이용해 PostgreSQL 서버에 접속합니다.
- 스냅샷
- 백업 시작 시, pg_dump는 REPEATABLE READ 또는 SERIALIZABLE 수준의 트랜잭션을 시작하여 현재 시점의 데이터베이스 스냅샷을 생성합니다.
- 이를 통해 백업 작업 도중 데이터베이스에 변화가 있더라도, 시작 시점의 일관된 상태를 유지할 수 있습니다.
2.2. 메타데이터 추출
- 시스템 카탈로그 조회
- pg_dump는 PostgreSQL의 시스템 카탈로그(예: pg_class, pg_attribute 등)를 조회하여 데이터베이스의 구조를 파악합니다. (테이블, 인덱스, 시퀀스, 뷰, 제약 조건 등 다양한 객체의 정의가 포함됩니다.)
- DDL 명령어 생성
- 조회한 정보를 바탕으로, 복원 시 필요한 DDL 명령어를 생성합니다.
2.3. 데이터 추출 및 COPY 활용
- 데이터 읽기
- 각 테이블의 데이터를 읽어 들여, 백업 파일에 기록합니다.
- COPY 명령어 사용
- plain text 형식의 백업에서는 효율적인 데이터 처리를 위해 COPY 명령어를 사용합니다.
- 복원 시에도 이 COPY 명령어를 실행하여 데이터를 적재할 수 있습니다.
2.4. 백업 파일 생성 및 형식 선택
사용자가 지정한 형식에 따라 백업 파일이 생성됩니다.
- Plain Text: SQL 스크립트 형태로 백업 내용을 기록합니다. (이 형식은 pg_restore를 통한 부분 복원 옵션을 지원하지 않습니다.)
- Custom (-Fc 옵션): 이진 포맷으로 저장되어, pg_restore를 이용해 특정 테이블이나 스키마 단위로 복원이 가능합니다.
- Directory (-Fd 옵션): 여러 파일로 분할 저장되어 대용량 백업에 유리하며, pg_restore의 유연한 복원 옵션을 활용할 수 있습니다. (병렬 작업 지원)
- tar (-Ft 옵션): tarball로 압축되어 저장됩니다. 복원 시 pg_restore를 사용합니다.
2.5. 객체 종속성 및 순서 관리
테이블 간의 종속성(예: 외래 키 제약 등)을 고려하여 객체들이 올바른 순서대로 복원될 수 있도록 SQL 명령어들이 정렬됩니다.
3. 기본 사용법
▸ 가장 단순한 형태로, pg_dump를 실행하면 대상 데이터베이스의 전체 백업이 plain text 형식으로 생성됩니다.
pg_dump 데이터베이스명 > database_backup.sql
▸ 특정 테이블만 백업하려면 -t 옵션을 활용할 수 있습니다.
# 해당 데이터베이스의 대상 테이블만 백업
pg_dump -t 테이블명 데이터베이스명 > table_backup.sql
▸ 백업 파일 저장 위치 지정
pg_dump 데이터베이스명 -f /backup/location/database_backup.sql
▸ 메타데이터만 백업
# 해당 데이터베이스의 메타데이터만 백업
pg_dump -s -d 데이터베이스명 -f schema_metadata.sql
+ 옵션
- -d: 백업 대상 데이터베이스 지정
- -n: 특정 스키마 백업
- -t: 특정 테이블 백업
- -s: 메타데이터만 백업
- -f: 백업 파일 저장 위치 지
- -U: 사용자 이름 지정
- -h: 호스트 주소 지정
- -p 포트 번호 지정
- -v: 상세모드 (Verbose)
4. 복원 방법
▸ Plain Text 형식의 백업 파일
# SQL 인터프리터로 실행
psql 타겟데이터베이스명 < backup.sql
▸ Custom 및 Directory 형식의 백업 파일
pg_restore -d 타겟데이터베이스명 backup_file
# -t 옵션으로 원하는 테이블만 복원 가능
pg_restore -d 타겟데이터베이스명 -t 테이블명 backup_file
▸ tar 형식의 백업 파일
pg_restore -d 타겟데이터베이스명 backup.tar
5. 응용 예제
5.1. PG to PG 마이그레이션
# 소스 서버의 데이터베이스를 pg_dump로 백업한 후, 그 SQL 스크립트를 타겟 서버의 타겟 데이터베이스에 바로 복원 (Copy 사용)
pg_dump -h 소스호스트 -d 소스데이터베이스명 | psql -h 타겟호스트 -d 타겟데이터베이스명
5.2. 압축
5.2.1. Custom 형식 활용
Custom 형식은 백업 파일에 압축 기능이 내장되어 있습니다.
pg_dump -Fc 데이터베이스명 -f backup.dump
5.2.2. 실시간 압축 및 복원
▸ 백업 후 실시간 압축 파이프라인
pg_dump 데이터베이스명 | gzip > backup.sql.gz
▸복원 방법
gunzip -c backup.sql.gz | psql 타겟데이터베이스명
5.2.3. 병렬 백업
Directory 형식 활용: Directory 형식(-Fd) 사용 시 -j 옵션으로 병렬 백업 및 복원이 가능합니다.
▸ 병렬 백업
# 4개의 병렬 작업 사용
pg_dump -Fd -j 4 데이터베이스명 -f backup_dir
▸ 병렬 복원
# 4개의 병렬 작업 사용
pg_restore -j 4 데이터베이스명 backup_dir
5.2.4. 메타데이터와 데이터 분리 백업
▸ 메타데이터만 백업
pg_dump -s -d 데이터베이스명 -f schema.sql
▸ 데이터만 백업
pg_dump -a -d 데이터베이스명 -f data.sql
오늘은 여기까지~
'PostgreSQL' 카테고리의 다른 글
PostgreSQL: pgpool-II 설치 및 사용법 (0) | 2025.03.10 |
---|---|
PostgreSQL: etcd, Patroni 명령어 사전 (0) | 2025.02.28 |
PostgreSQL: 조인 알고리즘과 유형 (0) | 2025.02.23 |
PostgreSQL: Citus ERROR: connection to the remote node postgres@192.168.1.100:5432 failed with the following error: server closed the connection unexpectedly (0) | 2025.02.21 |
PostgreSQL: 표현식 인덱스 (0) | 2025.02.19 |