Innovating today, leading tomorrow

OpenSQL_Technical Guide
[OpenSQL] pg_restore

[OpenSQL] pg_restore

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_restorepg_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-errorSQL 명령을 데이터베이스로 보내는 동안 오류가 발생하면 종료합니다.
-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 –versionpg_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 명령을 출력합니다. 이렇게 하면 덤프의 표준 호환성이 높아지지만 제대로 복원되지 않을 수 있습니다.
-? –helppg_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’를 바로 이어서 확인해보세요!

광고성 정보 수신

개인정보 수집, 활용 목적 및 기간

(주)티맥스티베로의 개인정보 수집 및 이용 목적은 다음과 같습니다.
내용을 자세히 읽어보신 후 동의 여부를 결정해 주시기 바랍니다.

  • 수집 목적: 티맥스티베로 뉴스레터 발송 및 고객 관리
  • 수집 항목: 성함, 회사명, 회사 이메일, 연락처, 부서명, 직급, 산업, 담당업무, 관계사 여부, 방문 경로
  • 보유 및 이용 기간: 동의 철회 시까지

※ 위 개인정보 수집 및 이용에 대한 동의를 거부할 권리가 있습니다.
※ 필수 수집 항목에 대한 동의를 거부하는 경우 뉴스레터 구독이 제한될 수 있습니다.

개인정보의 처리 위탁 정보
  • 업체명: 스티비 주식회사
  • 위탁 업무 목적 및 범위: 광고가 포함된 뉴스레터 발송 및 수신자 관리
 

개인정보 수집 및 이용

개인정보 수집, 활용 목적 및 기간

(주)티맥스티베로의 개인정보 수집 및 이용 목적은 다음과 같습니다. 내용을 자세히 읽어보신 후 동의 여부를 결정해 주시기 바랍니다.

  • 수집 목적: 티맥스티베로 뉴스레터 발송 및 고객 관리
  • 수집 항목: 성함, 회사명, 회사 이메일, 연락처, 부서명, 직급, 산업, 담당업무, 관계사 여부, 방문 경로
  • 보유 및 이용 기간: 동의 철회 시까지

※ 위 개인정보 수집 및 이용에 대한 동의를 거부할 권리가 있습니다.
※ 필수 수집 항목에 대한 동의를 거부하는 경우 뉴스레터 구독이 제한될 수 있습니다.

개인정보의 처리 위탁 정보

  • 업체명: 스티비 주식회사
  • 위탁 업무 목적 및 범위: 광고가 포함된 뉴스레터 발송 및 수신자 관리
  •