pg_restore 개요
pg_restore 이란?
g_restore is a utility for restoring a PostgreSQL database from an archive created by pg_dump in one of the non-plain-text formats.
– PostgreSQL 공식 문서 –
pg_restore
은 pg_dump
가 만든 아카이브 백업 파일에서 PostgreSQL 데이터베이스를 복원하기 위해 사용하는 유틸리티입니다.
pg_restore
은 두 가지 모드로 작동할 수 있습니다.
- 데이터베이스 이름을 지정했을 경우,
pg_restore
은 해당 데이터베이스에 연결하고 아카이브 내용을 데이터베이스에 직접 복원합니다. - 그렇지 않으면 데이터베이스를 재구성하는 데 필요한 SQL명령이 포함된 스크립트가 생성됩니다. 이 스크립트는
pg_dump
의 일반 텍스트 출력 형식과 동일하며, 그 출력을 제어하는 일부 옵션은pg_dump
와 유사합니다.
pg_restore 문법
pg_restore [connection-option…] [option…] [filename]
pg_ctl 옵션
- B –no-blobs
- B –no-blobs
옵션 | 설명 |
---|---|
filename | 복원할 아카이브 파일의 위치를 지정합니다. |
-a –data-only | 스키마가 아닌 데이터만 복원합니다. 테이블 데이터, blob 및 시퀀스 값이 복원됩니다. |
-c –clean | 데이터베이스 개체를 만들기 위한 명령을 출력하기 전에 데이터베이스 개체를 정리(삭제)하는 명령을 출력합니다. |
-C –create | 데이터베이스 자체를 생성하고 생성된 데이터베이스에 다시 연결하는 명령으로 출력을 시작합니다. |
-d dbname –dbname=dbname | 지정된 데이터베이스로 연결하고 데이터베이스에 직접 복원합니다. |
-e –exit-on-error | SQL 명령을 데이터베이스로 보내는 동안 오류가 발생하면 종료합니다. |
-f filename –file=filename | 생성된 스크립트에 대한 출력 파일을 지정합니다. |
-F format –format=format | 아카이브 형식을 선택합니다. 사용 가능한 포맷은 다음과 같습니다. – c/custom : pg_dump의 사용자 지정 형식 – d/directory : 디렉토리 형식 아카이브 – t/tar : tar 형식 아카이브 |
-I index –index=index | 지정된 인덱스만 복원합니다. |
-j number-of-jobs –jobs=number-of-jobs | 최대 동시 세션을 사용하여 가장 많은 시간을 사용하는 데이터로드, 인덱스 생성, 제약 조건 생성을 지정한 수만큼 동시에 실행합니다. |
-l –list | 아카이브의 리스트를 나열합니다. |
-L list-file –use-list=list-file | 지정된 아카이브만 복원하고 파일에 써있는 순서대로 복원합니다. |
-n schema –schema=schema | 지정된 스키마에 있는 오브젝트만 복원합니다. |
-N schema –exclude-schema=schema | 지정된 스키마에 있는 오브젝트를 복원하지 않습니다. |
-O –no-owner | 원래 데이터베이스와 일치하도록 오브젝트의 소유권을 설정하는 명령을 출력하지 않습니다. |
-P function-name(argtype [, …]) –function=function-name(argtype [, …]) | 지정된 함수만 복원합니다. |
-R –no-reconnect | 이 옵션은 더 이상 사용되지 않지만 이전 버전과의 호환성을 위해 여전히 허용됩니다. |
-s –schema-only | 데이터가 아닌 오브젝트 정의(스키마)만 복원합니다. 이 옵션은 –data-only 옵션과 반대입니다. |
-S username –superuser=username | 트리거를 비활성화할 때 사용할 수퍼유저 사용자 이름을 지정합니다. |
-t table –table=table | 지정한 이름과 이름이 일치하는 테이블만 복원합니다. |
-T trigger –trigger=trigger | 지정한 이름과 이름이 일치하는 트리거만 복원합니다. |
-v –verbose | 상세 모드를 지정합니다. 이렇게 하면 pg_restore가 자세한 개체 설명과 시작/중지 시간을 파일에 출력하고 메시지를 표준 오류로 진행합니다. |
-V –version | pg_restore 버전을 출력하고 종료합니다. |
-x –no-privileges –no-acl | 접근 권한 복원을 하지 않습니다. (grant/revoke 커맨드) |
-1 –single-transaction | 복원을 단일 트랜잭션으로 실행합니다. 이렇게 하면 모든 명령이 ㅅ어공적으로 완료되거나 변경 사항이 적용되지 않습니다. |
–disable-triggers | 이 옵션은 데이터 전용 복원을 수행하는 경우에만 사용할 수 있습니다. 데이터가 복원되는 동안 대상 테이블에서 트리거를 일시적으로 비활성화하는 명령을 포함합니다. |
–enable-row-security | 이 옵션은 row security가 있는 테이블의 내용을 복원할 때만 사용할 수 있습니다. 기본적으로 pg_restore은 테이블에서 모든 데이터가 덤프되도록 row_security를 on으로 설정합니다. |
–if-exists | 데이터베이스 객체를 cleaning할 때는 조건부 명령(즉, IF EXISTS 절 추가)을 사용합니다. |
–no-comments –no-data-for-failed-tables –no-publications –no-security-labels –no-subscriptions –no-table-access-method –no-tablespaces | –no-comments : 아카이브 코멘트를 덤프하지 않습니다. –no-data-for-failed-tables : 테이블에 대한 생성 명령이 실패하더라도 테이블 데이터를 복원됩니다. –no-publications : publication 을 복원하지 않습니다. –no-security-labels : security label을 복원하지 않습니다. –no-subscriptions : subscription을 복하지 않습니다. –no-table-access-method : 테이블 접근 방법을 선택하는 명령어를 출력하지 않습니다. –no-tablespaces : SELECT TABLESPACE 구문은 출력하지 않습니다. |
–section=sectionname | 지정한 섹션만 복원합니다. 사용 가능한 섹션 이름은 다음과 같습니다. – pre-data – data – post-data 여러 섹션을 지정할 수 있으며 기본값은 모든 섹션을 복원하는 것입니다. |
–strict-names | 각 지정한 schema(-n/–schema), table(-t/–table)이 복원 할 데이터베이스에서 하나 이상의 스키마/테이블과 일치해야 합니다. |
–use-set-session-authorization | 오브젝트의 소유권을 확인하려면 ALTER OWNER 명령 대신 SQL 표준 SET SESSION AUTHERITION 명령을 출력합니다. 이렇게 하면 덤프의 표준 호환성이 높아지지만 제대로 복원되지 않을 수 있습니다. |
-? –help | pg_restore 커맨드에 대한 도움말을 표시 하고 종료합니다. |
-h host –host=host | 서버가 실행 중인 시스템의 호스트 이름을 지정합니다. |
-p port –port=port | 서버가 연결을 수신하는 TCP 포트 또는 로컬 Unix 도메인 소켓 파일 확장자를 지정합니다. |
-U username –username=username | 연결할 사용자 이름입니다. |
-w –no-password | 암호 프롬포트를 표시하지 않습니다. |
-W –password | 데이터베이스에 연결하기 전에 pg_restore가 암호를 묻도록 합니다. |
–role=rolename | 덤프를 만드는데 사용할 role을 지정합니다. |
pg_restore 사용 예시
- mydb라는 데이터베이스를 사용자 지정 형식으로 백업했을 경우
pg_dump -Fc mydb > db.dump
- 데이터베이스를 삭제하고 덤프 파일에서 재 생성할 경우
dropdb mydb
pg_restore -C -d postgres db.dump
- newdb라는 새로운 데이터베이스에 복원 할 경우
createdb -T template0 newdb
pg_restore -d newdb db.dump
- 데이터베이스 리스트의 순서를 변경하려면 먼저 리스트를 덤프 해야 합니다.
pg_restore -l db.dump > db.list
각 리스트 파일은 헤더와 각 리스트로 구성됩니다.
;
; Archive created at Mon Sep 14 13:55:39 2009
; dbname: DBDEMOS
; TOC Entries: 81
; Compression: 9
; Dump Version: 1.10-0
; Format: CUSTOM
; Integer: 4 bytes
; Offset: 8 bytes
; Dumped from database version: 8.3.5
; Dumped by pg_dump version: 8.3.8
;
;
; Selected TOC Entries:
;
3; 2615 2200 SCHEMA – public pasha
1861; 0 0 COMMENT – SCHEMA public pasha
1862; 0 0 ACL – public pasha
317; 1247 17715 TYPE public composite pasha
319; 1247 25899 DOMAIN public domain0 pasha
Semicolons start a comment, and the numbers at the start of lines refer to the internal archive ID assigned to each item.Lines in the file can be commented out, deleted, and reordered. For example:
10; 145433 TABLE map_resolutions postgres
;2; 145344 TABLE species postgres
;4; 145359 TABLE nt_header postgres
6; 145402 TABLE species_records postgres
;8; 145416 TABLE ss_old postgres
- 위 리스트는 pg_restore에 대한 입력으로 사용할 수 있으며, 항목 10과 6만 다음 순서로 복원할 경우
$ pg_restore -L db.list db.dum
주의할 점
- 데이터를 기존 테이블에 복원하고 –disable-triggers 옵션을 사용하는 경우, pg_restore는 데이터를 삽입하기 전에 사용자 테이블에 대한 트리거를 비활성화 하는 명령을 한 다음 데이터를 삽입하고, 다시 활성화하는 명령을 합니다. 복원이 중간에 중지되면 시스템 카탈로그가 잘못된 상태로 유지될 수 있습니다.
- pg_restore은 큰 오브젝트를 선택적으로 복원할 수 없습니다. 예를 들어 특정 테이블의 오브젝트만 복원할 수 있습니다. 아카이브에 큰 오브젝트가 포함되어 있으면 모든 오브젝트가 복원되고 -L, -t, 또는 기타 옵션을 통해 제외된 오브젝트는 복원되지 않습니다.
pg_restore 환경변수
다음 환경변수들과 같이 pg_restore을 사용할 수 있습니다.
환경변수 | 설명 |
---|---|
PGDATABASE | |
PGHOST | |
PGOPTIONS | |
PGPORT | |
PGUSER | 기본 연결 매개변수 |
PG_COLOR | 표시되는 메세지에서 색상을 사용할지 여부를 지정합니다. 사용 가능한 값은 다음과 같습니다. always auto never |
대부분의 다른 PostgreSQL의 유틸리티와 마찬가지로 libpq에서 지원하는 환경변수를 사용합니다. libpq에서 지원하는 환경변수에 대한 내용은 여기 를 참고해주세요!!
사용 방법
export PGHOME=/opensql/pg #opensql engine directory
export PGDATA=/opensql/pg/$PGVERSION/data #opensql database clsuter directory
export PGHOST=/var/run/opensql #opensql socket directory
export PGUSER=postgres #opensql Basic DB User Name
export PGPASSFILE=’/opensql/.pgpass’ #opensql pgpass file
지금까지 ‘PostgreSQL pg_restore’에 관해 알아보았습니다
‘PostgreSQL pg_upgrade’를 바로 이어서 확인해보세요!