이전글
2023.07.27 - [본업/Database] - [PostgreSQL] Ubuntu Linux PostgreSQL 사용법 - #3-2 DBeaver 연결
PostgreSQL의 Backup & Restore에는 세 가지 명령어가 주로 사용된다.
- pg_dumpall : 데이터베이스 클러스터 전제를 백업
- pg_dump : 특정 데이터베이스를 백업
- pg_restore : pg_dump 및 pg_dumpall의 백업 파일을 사용해 데이터베이스 또는 클러스터 전제를 복원
각 명령어의 사용은 사실상 다양한 옵션이 붙어 실행되는데, 그 옵션의 수가 매우 많고 다양하여 처음 접했을 때 혼란스러웠다.
이를 처음 공부할때 최대한 빨리 받아들이기 위해 pgAdmin의 GUI를 활용해 백업, 복원할 때를 가정하여 GUI 화면 상의 옵션과 실제 명령어의 옵션을 각각 연관지어 설명한다.
참고로 한 번 보고, 이해하고 나면 DBeaver같은 응용 프로그램으로도 충분히 백업과 복구가 가능했다.
pg_dumpall
- Filename: 출력 파일 이름(stdout : -)
- -f, --file
- Format: 백업 파일 포맷
- -F, --format
- custom, directory, tar
- ex) -Fc or -F c
- ex) -Fd or --format=d
- ex)-Ft or --format=t
- Role name: 복원 전에 SET ROLE 수행
- --role
- Only data: 스키마가 아닌, 데이터만 덤프
- -a, --data-only
- Only schema: 데이터가 아닌, 스키마만 덤프
- -s, --schema-only
- Owner: (Plaintext 포맷에서)원시 데이터베이스와 일치하도록 object 소유권을 설정하는 명령 건너뛰기
- -O, --no-owner
- Privilege: 접근 권한(privileges)(grant/revoke) 덤프 안 함
- -x, --no-privileges
- Tablespace: Tablespace 할당 덤프 안 함
- --no-tablespaces
- Unlogged table data: 기록되지 않은(unlogged) 테이블 및 시퀀스 컨텐츠 덤프 안함
- --no-unlogged-table-data
- Comments: 주석 덤프 안함
- --no-comments
- Use Column Inserts: 컬럼 이름과 함께 INSERT 명령을 사용해 데이터 덤프
- --column-inserts
- User Insert Commands: COPY 대신 INSERT 명령을 사용해 데이터 덤프
- --inserts
- Include DROP DATABASE statement: 다시 만들기(recreating) 전에 데이터베이스 object 삭제(DROP)
- -c, --clean
- Trigger: data-only 복원 시, 트리거 사용 안함
- --disable-triggers
- $ quoting: SQL 표준 따옴표를 사용하고 $ 인용구 사용 안함
- --disable-dollar-quoting
- With OID(s): OID 포함하여 덤프
- -o, --oids
- 버전 및 옵션 지원 여부 확인 필요
- Verbose messages: Verbose 모드 사용(세부 작업 내용 출력)
- -v, --verbose
- Force double quote on identifiers: 키워드가 아니더라도 모든 식별자에 강제로 인용구(") 적용
- --quote-all-identifiers
- User SET SESSION AUTHORIZATION: ALTER OWNER 대신 SET SESSION AUTHORIZATION 명령을 사용해 소유권 설정
- --use-set-session-authorization
pg_dump
- Filename: 출력 파일 혹은 디렉토리 이름
- -f, --file
- ex) -f /home/$USER/dbdump.sql
- ex) --file /home/$USER/mydump.tar
- Format: 출력 파일 포맷
- custom, directory, tar, plaintext(default)
- -F, --format
- ex) -Fc or -F c
- ex) -Fd or --format=d
- ex) -Ft or --format=t
- Compression ratio: 압축 포맷의 압축 수준
- -Z, --compress
- ex) -Z 4
- ex) -compress=4
- Encoding: 명시한 인코딩으로 데이터를 덤프
- -E, --encoding
- ex) -E UTF8
- ex) --encoding=ISO_8859_5
- Number of jobs: 명시한 개수 만큼 job을 병렬로 사용해 덤프
- -j, --jobs
- ex) -j 5
- Role name: 덤프 전에 SET ROLE 수행
- --role
- Sections: 명시된 섹션만 덤프.
- pre-data, data, post-data
- 디폴트는 모든 섹션을 덤프
- ex) --section=pre-data
- ex) --section=data
- ex) --section=post-data
- Only Data: 스키마가 아닌 데이터만 덤프
- -a, --data-only
- Only schema: 데이터가 아닌 스키마만 덤프
- -s, --schema-only
- Blobs: Large object들을 포함하여 덤프
- -b, --blobs
- No blobs: Large object들을 포함하지 않고 덤프
- -B, --no-blobs
- Owner: (Plaintext 포맷에서)원시 데이터베이스와 일치하도록 object 소유권을 설정하는 명령 건너뛰기
- -O, --no-owner
- Privilege: 접근 권한(privileges)(grant/revoke) 덤프 안 함
- -x, --no-privileges
- Tablespace: Tablespace 할당 덤프 안 함
- --no-tablespaces
- Unlogged table data: 기록되지 않은(unlogged) 테이블 및 시퀀스 컨텐츠 덤프 안함
- --no-unlogged-table-data
- Comments: 주석 덤프 안함
- --no-comments
- Use Column Inserts: 컬럼 이름과 함께 INSERT 명령을 사용해 데이터 덤프
- --column-inserts
- User Insert Commands: COPY 대신 INSERT 명령을 사용해 데이터 덤프
- --inserts
- Include CREATE DATABASE statement: CREATE DATABASE 명령을 포함해 덤프
- -C, --create
- Include DROP DATABASE statement: 다시 만들기(recreating) 전에 데이터베이스 object 삭제(DROP)
- -c, --clean
- Load Via Partition Root: 파티션 계층 구조의 root를 로드해 테이블 파티션을 덤프
- --load-via-partition-root
- Trigger: data-only 복원 시, 트리거 사용 안함
- --disable-triggers
- $ quoting: SQL 표준 따옴표를 사용하고 $ 인용구 사용 안함
- --disable-dollar-quoting
- With OID(s): OID 포함하여 덤프
- -o, --oids
- 버전 및 옵션 지원 여부 확인 필요
- Verbose messages: Verbose 모드 사용(세부 작업 내용 출력)
- -v, --verbose
- Force double quote on identifiers: 키워드가 아니더라도 모든 식별자에 강제로 인용구(") 적용
- --quote-all-identifiers
- User SET SESSION AUTHORIZATION: ALTER OWNER 대신 SET SESSION AUTHORIZATION 명령을 사용해 소유권 설정
- --use-set-session-authorization
pg_restore
- Format: 백업 파일 포맷
- custom, directory, tar, plaintext(default)
- -F, --format
- ex) -Fc or -F c
- ex) -Fd or --format=d
- ex) -Ft or --format=t
- Filename: 출력 파일 이름(stdout : -)
- -f, --file
- Number of jobs: 명시한 개수 만큼 job을 병렬로 사용해 덤프
- -j, --jobs
- ex) -j 5
- Role name: 복원 전에 SET ROLE 수행
- --role
- Sections: 명시된 섹션만 복원.
- pre-data, data, post-data
- 디폴트는 모든 섹션을 복원
- ex) --section=pre-data
- ex) --section=data
- ex) --section=post-data
- Only Data: 스키마가 아닌 데이터만 복원
- -a, --data-only
- Only schema: 데이터가 아닌 스키마만 복원
- -s, --schema-only
- Owner: (Plaintext 포맷에서)원시 데이터베이스와 일치하도록 object 소유권을 설정하는 명령 건너뛰기
- -O, --no-owner
- Privilege: 접근 권한(privileges)(grant/revoke) 덤프 안 함
- -x, --no-privileges
- Tablespace: Tablespace 할당 덤프 안 함
- --no-tablespaces
- Comments: 주석 덤프 안함
- --no-comments
- Include CREATE DATABASE statement: 복원 전에 대상 데이터베이스를 생성
- -C, --create
- Include DROP DATABASE statement: 다시 만들기(recreating) 전에 데이터베이스 object 삭제(DROP)
- -c, --clean
- Single translaction: 단일 트랜잭션으로 복원 실행
- -1, --single-transaction
- Trigger: data-only 복원 시, 트리거 사용 안함
- --disable-triggers
- No data for Failed Tables: 생성할 수 없는 테이블의 데이터는 복원 안함
- --no-data-for-failed-tables
- Verbose messages: Verbose 모드 사용(세부 작업 내용 출력)
- -v, --verbose
- User SET SESSION AUTHORIZATION: ALTER OWNER 대신 SET SESSION AUTHORIZATION 명령을 사용해 소유권 설정
- --use-set-session-authorization
- Exit on error: 에러 발생 시 종료.
- 디폴트는 계속 진행(복원 작업 종료 후 에러 카운트 출력)
- -e, --exit-on-error