본문 바로가기
프로그래밍/Postgresql

Postgresql 데이터 백업 복원

by 원피스랜드 2021. 1. 18.
반응형

Postgresql 데이터 백업 복원

 

백업, 복원

client에 postgresql가 설치 되어있다면, 서버에 직접 접속하지 않고 아래 --host, --port, --username 옵션을 사용해서 백업을 진행할수 있습니다. 

 

준비물 :
postgresql 설치  ( www.postgresql.org/download/ )

백업할 서버 주소, user 계정, 비밀번호, database명

복원할 서버 주소, user 계정, 비밀번호, database명   

 

1.  백업 

"%PSQL_HOME%\bin\pg_dump.exe" -Fc --host=%DB_HOST% --port=%DB_PORT% --username=%DB_USER% -d %DB_NAME% > %FILE_HOME%

 

 

명령어 예시

pg_dump.exe" -Fc --host=127.0.0.1 --port=5432 --username=ynkim -d YNKIM_DB > D:\db_dump\result\db.dump

 

 

pg_dump 옵션

 

C:\Program Files\PostgreSQL\11\bin>pg_dump --help 
pg_dump 프로그램은 데이터베이스를 텍스트 파일 또는 기타 
다른 형태의 파일로 덤프합니다. 

사용법: 
  pg_dump [옵션]... [DB이름] 

일반 옵션들: 
  -f, --file=파일이름          출력 파일 또는 디렉터리 이름 
  -F, --format=c|d|t|p         출력 파일 형식(사용자 지정, 디렉터리, tar, 
                               일반 텍스트(초기값)) 
  -j, --jobs=개수              덤프 작업을 병렬 처리 함 
  -v, --verbose                작업 내역을 자세히 봄 
  -V, --version                버전 정보를 보여주고 마침 
  -Z, --compress=0-9           출력 자료 압축 수위 
  --lock-wait-timeout=초       테이블 잠금 시 지정한 초만큼 기다린 후 실패 
  --no-sync                    fsync 작업 생략 
  -?, --help                   이 도움말을 보여주고 마침 

출력 내용을 다루는 옵션들: 
  -a, --data-only              스키마 빼고 자료만 덤프 
  -b, --blobs                  Large Object들도 함께 덤프함 
  -B, --no-blobs               Large Object들을 제외하고 덤프함 
  -c, --clean                  다시 만들기 전에 데이터베이스 개체 지우기(삭제) 
  -C, --create                 데이터베이스 만드는 명령구문도 포함시킴 
  -E, --encoding=인코딩        지정한 인코딩으로 자료를 덤프 함 
  -n, --schema=SCHEMA          지정한 SCHEMA들 자료만 덤프 
  -N, --exclude-schema=SCHEMA  지정한 SCHEMA들만 빼고 모두 덤프 
  -o, --oids                   OID 포함해서 덤프 
  -O, --no-owner               일반 텍스트 형식에서 
                               개체 소유권 복원 건너뛰기 
  -s, --schema-only            자료구조(스키마)만 덤프 
  -S, --superuser=NAME         일반 텍스트 형식에서 사용할 슈퍼유저 사용자 이름 
  -t, --table=TABLE            지정한 이름의 테이블들만 덤프 
  -T, --exclude-table=TABLE    지정한 테이블들만 빼고 덤프 
  -x, --no-privileges          접근 권한 (grant/revoke) 정보는 덤프 안 함 
  --binary-upgrade             업그레이드 유틸리티 전용 
  --column-inserts             칼럼 이름과 함께 INSERT 명령으로 자료 덤프 
  --disable-dollar-quoting     $ 인용 구문 사용안함, SQL 표준 따옴표 사용 
  --disable-triggers           자료만 복원할 때 트리거 사용을 안함 
  --enable-row-security        로우 보안 활성화 (현재 작업자가 접근할 수 
                               있는 자료만 덤프 함) 
  --exclude-table-data=테이블  해당 테이블 자료는 덤프 안함 
  --if-exists                  객체 삭제 시 IF EXISTS 구문 사용 
  --inserts                    COPY 대신 INSERT 명령으로 자료 덤프 
  --load-via-partition-root    상위 테이블을 통해 하위 테이블을 로드함 
  --no-comments                코멘트는 덤프 안함 
  --no-publications            발행 정보는 덤프하지 않음 
  --no-security-labels         보안 라벨 할당을 덤프 하지 않음 
  --no-subscriptions           구독 정보는 덤프하지 않음 
  --no-synchronized-snapshots  병렬 작업에서 스냅샷 일관성을 맞추지 않음 
  --no-tablespaces             테이블스페이스 할당을 덤프하지 않음 
  --no-unlogged-table-data     언로그드 테이블 자료는 덤프하지 않음 
  --quote-all-identifiers      예약어가 아니여도 모든 식별자는 따옴표를 씀 
  --section=SECTION            해당 섹션(pre-data, data, post-data)만 덤프 
  --serializable-deferrable    자료 정합성을 보장하기 위해 덤프 작업을 
                               직렬화 가능한 트랜잭션으로 처리 함 
  --snapshot=SNAPSHOT          지정한 스냅샷을 덤프 함 
  --strict-names               테이블이나 스키마를 지정했을 때 그 패턴에 맞는 
                               객체가 적어도 하나 이상 있어야 함 
  --use-set-session-authorization 
                               SET SESSION AUTHORIZATION 명령을 ALTER OWNER 명령 
                               대신 사용하여 소유권 설정 

연결 옵션들: 
  -d, --dbname=DBNAME      덤프할 데이터베이스 
  -h, --host=HOSTNAME      접속할 데이터베이스 서버 또는 소켓 디렉터리 
  -p, --port=PORT          데이터베이스 서버의 포트 번호 
  -U, --username=NAME      연결할 데이터베이스 사용자 
  -w, --no-password        암호 프롬프트 표시 안 함 
  -W, --password           암호 입력 프롬프트 보임(자동으로 처리함) 
  --role=ROLENAME          덤프 전에 SET ROLE 수행

 

2. 복원

 

pg_dump 를 실행해서 파일이 생성되었다면, 아래 구문을 이용해서 데이터를 밀어 넣을수 있습니다. 

 

"%PSQL_HOME%\bin\pg_restore.exe" -Fc --host=%DB_HOST% --port=%DB_PORT% --username=%DB_USER% -d %DB_NAME% %FILE_HOME%

 

명령어 예시

pg_restore.exe" -Fc --host=211.64.xxx.xxx --port=5432 --username=shlee -d SH_DB D:\db_dump\result\db.dump

 

pg_restore 옵션

C:\Program Files\PostgreSQL\11\bin>pg_restore --help
pg_restore 프로그램은 pg_dump로 만들어진 자료파일로 PostgreSQL 데이터베이스에
그 자료를 일괄 입력합니다.

사용법:
  pg_restore [옵션]... [파일]

일반 옵션들:
  -d, --dbname=NAME        접속할 데이터베이스 이름
  -f, --file=FILENAME      output file name (- for stdout)
  -F, --format=c|d|t       백업 파일 형식 (지정하지 않으면 자동분석)
  -l, --list               자료의 요약된 목차를 보여줌
  -v, --verbose            자세한 정보 보여줌
  -V, --version            버전 정보를 보여주고 마침
  -?, --help               이 도움말을 보여주고 마침

리스토어 처리를 위한 옵션들:
  -a, --data-only              스키마는 빼고 자료만 입력함
  -c, --clean                  다시 만들기 전에 데이터베이스 개체 지우기(삭제)
  -C, --create                 작업 대상 데이터베이스를 만듦
  -e, --exit-on-error          오류가 생기면 끝냄, 기본은 계속 진행함
  -I, --index=NAME             지정한 인덱스 만듦
  -j, --jobs=NUM               여러 병렬 작업을 사용하여 복원
  -L, --use-list=FILENAME      출력을 선택하고 해당 순서를 지정하기 위해
                               이 파일의 목차 사용
  -n, --schema=NAME            해당 스키마의 개체들만 복원함
  -N, --exclude-schema=NAME    해당 스키마의 개체들은 복원 안함
  -O, --no-owner               개체 소유권 복원 건너뛰기
  -P, --function=NAME(args)    지정한 함수 만듦
  -s, --schema-only            자료구조(스키마)만 만듦
  -S, --superuser=NAME         트리거를 사용하지 않기 위해 사용할 슈퍼유저
                               사용자 이름
  -t, --table=NAME             복원할 객체 이름 (테이블, 뷰, 기타)
  -T, --trigger=NAME           지정한 트리거 만듦
  -x, --no-privileges          접근 권한(grant/revoke) 지정 안함
  -1, --single-transaction     하나의 트랜잭션 작업으로 복원함
  --disable-triggers           자료만 복원할 때 트리거 사용을 안함
  --enable-row-security        로우 보안 활성화
  --if-exists                  객체 삭제 시 IF EXISTS 구문 사용
  --no-comments                코멘트는 복원하지 않음
  --no-data-for-failed-tables  만들 수 없는 테이블에 대해서는 자료를 덤프하지 않음
  --no-publications            발행 정보는 복원 안함
  --no-security-labels         보안 라벨을 복원하지 않음
  --no-subscriptions           구독 정보는 복원 안함
  --no-tablespaces             테이블스페이스 할당을 복원하지 않음
  --section=SECTION            지정한 섹션만 복원함
                               섹션 종류: pre-data, data, post-data
  --strict-names               테이블이나 스키마를 지정했을 때 그 패턴에 맞는
                               객체가 적어도 하나 이상 있어야 함
  --use-set-session-authorization
                               SET SESSION AUTHORIZATION 명령을 ALTER OWNER 명령
                               대신 사용하여 소유권 설정

연결 옵션들:
  -h, --host=HOSTNAME      접속할 데이터베이스 서버 또는 소켓 디렉터리
  -p, --port=PORT          데이터베이스 서버의 포트 번호
  -U, --username=NAME      연결할 데이터베이스 사용자
  -w, --no-password        암호 프롬프트 표시 안 함
  -W, --password           암호 입력 프롬프트 보임(자동으로 처리함)
  --role=ROLENAME          복원 전에 SET ROLE 수행

The options -I, -n, -N, -P, -t, -T, and --section can be combined and specified
multiple times to select multiple objects.

사용할 입력 파일을 지정하지 않았다면, 표준 입력(stdin)을 사용합니다.

오류보고: <pgsql-bugs@postgresql.org>.

 

 

 

반응형

댓글