이 토토 캔 방법의 기본 개념은 서버에 피드백할 때 토토 캔 당시와 동일한 상태로 데이터베이스를 다시 생성하는 SQL 명령이 포함된 파일을 생성하는 것입니다.PostgreSQL유틸리티 프로그램 제공pg_dump이 목적을 위해. 이 명령의 기본 사용법은 다음과 같습니다.
pg_dumpdb이름토토 캔파일
보시다시피,pg_dump그 결과를 표준 출력에 씁니다. 이것이 어떻게 유용한지 아래에서 살펴보겠습니다. 위의 명령이 텍스트 파일을 생성하는 동안pg_dump병렬 처리 및 객체 복원에 대한 보다 세밀한 제어를 허용하는 다른 형식으로 파일을 생성할 수 있습니다.
pg_dump단골입니다포스트그레SQL클라이언트 애플리케이션(비록 특히 영리한 애플리케이션이지만). 이는 데이터베이스에 액세스할 수 있는 모든 원격 호스트에서 이 백업 절차를 수행할 수 있음을 의미합니다. 하지만 기억해두세요pg_dump특별한 권한으로는 작동하지 않습니다. 특히, 백업하려는 모든 테이블에 대한 읽기 액세스 권한이 있어야 하므로 전체 데이터베이스를 백업하려면 거의 항상 데이터베이스 수퍼유저로 실행해야 합니다. (전체 데이터베이스를 백업할 수 있는 충분한 권한이 없는 경우에도 다음과 같은 옵션을 사용하여 액세스할 수 있는 데이터베이스 부분을 백업할 수 있습니다.-n또는스키마-t.)테이블
어떤 데이터베이스 서버를 지정하려면pg_dump연락해야 합니다. 명령줄 옵션을 사용하세요-h그리고호스트-p. 기본 호스트는 로컬 호스트 또는 원하는 호스트입니다.포트PGHOST환경 변수가 지정합니다. 마찬가지로 기본 포트는 다음과 같이 표시됩니다.PGPORT환경 변수이거나, 실패할 경우 컴파일된 기본값에 의해 실행됩니다. (편리하게도 서버는 일반적으로 동일한 컴파일된 기본값을 갖습니다.)
다른 것과 마찬가지로포스트그레SQL클라이언트 애플리케이션,pg_dump기본적으로 현재 운영 체제 사용자 이름과 동일한 데이터베이스 사용자 이름으로 연결됩니다. 이를 재정의하려면 다음 중 하나를 지정하십시오.-U옵션 또는 환경 변수 설정PGUSER. 기억해두세요pg_dump연결에는 일반 클라이언트 인증 메커니즘이 적용됩니다(다음에 설명되어 있음PostgreSQL : 문서 : 12 : CHAPTER 20. 클라이언트 스포츠 토토 결과).
중요한 이점pg_dump나중에 설명되는 다른 백업 방법에 비해 다음과 같습니다.pg_dump의 출력은 일반적으로 최신 버전의에 다시 로드될 수 있습니다.포스트그레SQL반면, 파일 수준 백업과 지속적인 보관은 모두 서버 버전별로 매우 다릅니다.pg_dump또한 32비트에서 64비트 서버로 이동하는 등 데이터베이스를 다른 머신 아키텍처로 전송할 때 작동하는 유일한 방법입니다.
다음에 의해 생성된 토토 캔pg_dump내부적으로 일관성이 있습니다. 즉, 토토 캔는 당시 데이터베이스의 스냅샷을 나타냅니다.pg_dump실행을 시작했습니다.pg_dump작업 중에는 데이터베이스의 다른 작업을 차단하지 않습니다. (대부분의 형식과 같이 배타적 잠금으로 작동해야 하는 작업은 예외입니다.테이블 변경.)
다음에 의해 생성된 텍스트 파일pg_dump다음에서 읽을 수 있도록 의도되었습니다.psql프로그램. 토토 캔를 복원하는 일반적인 명령 형식은 다음과 같습니다.
psqldb이름<토토 캔파일
어디에서토토 캔파일는 다음의 출력 파일입니다.pg_dump명령. 데이터베이스db이름이 명령으로는 생성되지 않으므로 다음에서 직접 생성해야 합니다.템플릿0실행 전psql(예: 와createdb -T template0). psql다음과 유사한 옵션을 지원합니다pg_dump연결할 데이터베이스 서버와 사용할 사용자 이름을 지정합니다. 참조psql15632_15715pg_restore유틸리티.db이름
SQL 토토 캔를 복원하기 전에 개체를 소유하거나 토토 캔된 데이터베이스의 개체에 대한 권한을 부여받은 모든 사용자가 이미 존재해야 합니다. 그렇지 않으면 복원 시 원래 소유권 및/또는 사용 권한으로 개체를 다시 생성하지 못합니다. (때로는 이것이 당신이 원하는 것이지만 일반적으로 그렇지 않습니다.)
기본적으로는psqlSQL 오류가 발생한 후에도 스크립트가 계속 실행됩니다. 당신은 달리고 싶을 수도 있습니다psql와 함께ON_ERROR_STOP해당 동작을 변경하기 위해 설정된 변수psqlSQL 오류가 발생하면 종료 상태 3으로 종료합니다.
psql --set ON_ERROR_STOP=ondb이름<토토 캔파일
어느 쪽이든 데이터베이스는 부분적으로만 복원됩니다. 또는 전체 토토 캔를 단일 트랜잭션으로 복원하도록 지정하여 복원이 완전히 완료되거나 완전히 롤백되도록 할 수 있습니다. 이 모드는를 전달하여 지정할 수 있습니다.-1또는--단일 트랜잭션명령줄 옵션psql. 이 모드를 사용할 때는 사소한 오류라도 이미 여러 시간 동안 실행된 복원을 롤백할 수 있다는 점에 유의하세요. 그러나 부분적으로 복원된 토토 캔 후에 복잡한 데이터베이스를 수동으로 정리하는 것보다 이것이 더 나을 수도 있습니다.
의 능력pg_dump그리고psql파이프에 쓰거나 파이프에서 읽으면 데이터베이스를 한 서버에서 다른 서버로 직접 토토 캔할 수 있습니다. 예를 들면 다음과 같습니다.
pg_dump -h호스트1db이름| psql -h호스트2db이름
다음에 의해 생성된 토토 캔pg_dump다음에 상대적입니다.템플릿0. 이는 모든 언어, 절차 등이 다음을 통해 추가되었음을 의미합니다.템플릿1또한 버릴 것입니다pg_dump. 따라서 복원시 사용자 정의를 사용하는 경우템플릿1, 다음에서 빈 데이터베이스를 생성해야 합니다.템플릿0, 위의 예와 같습니다.
백업을 복원한 후 실행하는 것이 좋습니다.분석각 데이터베이스에서 쿼리 최적화 프로그램은 유용한 통계를 갖습니다. 참조섹션 24.1.3그리고섹션 24.1.6자세한 정보를 확인하세요. 대량의 데이터를 로드하는 방법에 대한 추가 조언은PostgreSQL효율적으로, 참조PostgreSQL : 문서 : 12 : 14.4. 사설 토토베이스 채우기.
pg_dump한 번에 하나의 데이터베이스만 토토 캔하며 역할이나 테이블스페이스에 대한 정보는 토토 캔하지 않습니다(데이터베이스별이 아닌 클러스터 전체에 적용되기 때문). 데이터베이스 클러스터의 전체 콘텐츠를 편리하게 토토 캔할 수 있도록 지원하기 위해,pg_dumpall프로그램이 제공됩니다.pg_dumpall특정 클러스터의 각 데이터베이스를 백업하고 역할 및 테이블스페이스 정의와 같은 클러스터 전체 데이터도 보존합니다. 이 명령의 기본 사용법은 다음과 같습니다.
pg_dumpall 토토 캔파일
    결과 토토 캔는 다음을 통해 복원할 수 있습니다.psql:
psql -f토토 캔파일포스트그레
    (실제로 기존 데이터베이스 이름을 지정하여 시작할 수 있지만 빈 클러스터에 로드하는 경우포스트그레스일반적으로 사용되어야 합니다.) 복원 시 항상 데이터베이스 수퍼유저 액세스 권한이 필요합니다.pg_dumpall토토 캔, 이는 역할 및 테이블스페이스 정보를 복원하는 데 필요하기 때문입니다. 테이블스페이스를 사용하는 경우 토토 캔의 테이블스페이스 경로가 새 설치에 적합한지 확인하세요.
pg_dumpall역할, 테이블스페이스 및 빈 데이터베이스를 다시 생성하는 명령을 내보낸 다음 호출하여 작동합니다.pg_dump각 데이터베이스에 대해. 즉, 각 데이터베이스는 내부적으로 일관성이 있지만 서로 다른 데이터베이스의 스냅샷은 동기화되지 않습니다.
클러스터 전체 데이터는 다음을 사용하여 단독으로 토토 캔될 수 있습니다.pg_dumpall --전역 전용옵션. 이는 다음을 실행하는 경우 클러스터를 완전히 백업하는 데 필요합니다.pg_dump개별 데이터베이스에 대한 명령.
일부 운영 체제에는 큰 파일을 생성할 때 문제를 일으키는 최대 파일 크기 제한이 있습니다.pg_dump출력 파일. 다행히도,pg_dump표준 출력에 쓸 수 있으므로 표준 Unix 도구를 사용하여 이 잠재적인 문제를 해결할 수 있습니다. 몇 가지 가능한 방법이 있습니다:
압축 토토 캔를 사용하세요. 예를 들어 좋아하는 압축 프로그램을 사용할 수 있습니다.gzip:
pg_dumpdb이름| 압축파일 이름.gz
다음으로 새로고침:
gunzip -c파일 이름.gz | psqldb이름
또는:
고양이파일 이름.gz | 총집합 | psqldb이름
사용분할. 그분할명령을 사용하면 출력을 기본 파일 시스템에 적합한 크기의 더 작은 파일로 분할할 수 있습니다. 예를 들어 2GB 청크를 만들려면 다음을 수행하세요.
pg_dumpdb이름| 분할 -b 2G -파일 이름
다음으로 새로고침:
고양이파일 이름* | psqldb이름
GNU를 사용하는 경우분할사용이 가능하며gzip함께:
pg_dumpdb이름| 분할 -b 2G --filter='gzip  $FILE.gz'
    다음을 사용하여 복원할 수 있습니다.zcat.
사용pg_dump의 사용자 정의 토토 캔 형식입니다. 만약PostgreSQL다음 시스템을 기반으로 구축되었습니다.zlib압축 라이브러리가 설치되면 사용자 정의 토토 캔 형식은 데이터를 출력 파일에 쓸 때 압축합니다. 그러면 다음을 사용하는 것과 유사한 토토 캔 파일 크기가 생성됩니다.gzip이지만 테이블을 선택적으로 복원할 수 있다는 추가 이점이 있습니다. 다음 명령은 사용자 정의 토토 캔 형식을 사용하여 데이터베이스를 토토 캔합니다.
pg_dump -Fcdb이름파일 이름
사용자 정의 형식 토토 캔는 다음을 위한 스크립트가 아닙니다.psql, 대신 다음을 사용하여 복원해야 합니다.pg_restore, 예:
pg_restore -ddb이름파일 이름
참조pg_dump그리고pg_restore자세한 내용은 참조 페이지를 참조하세요.
매우 큰 데이터베이스의 경우 결합이 필요할 수 있습니다.분할다른 두 가지 접근 방식 중 하나를 사용합니다.
사용pg_dump의 병렬 토토 캔 기능입니다. 대규모 데이터베이스의 토토 캔 속도를 높이려면 다음을 사용할 수 있습니다.pg_dump의 병렬 모드입니다. 그러면 여러 테이블이 동시에 토토 캔됩니다. 다음을 사용하여 병렬 처리 수준을 제어할 수 있습니다.-j매개변수. 병렬 토토 캔는 "디렉터리" 아카이브 형식에만 지원됩니다.
pg_dump -jnum-F d -fout.dirdb이름
당신은 사용할 수 있습니다pg_restore -j병렬로 토토 캔를 복원합니다. 이는 생성 여부에 관계없이 "사용자 정의" 또는 "디렉토리" 아카이브 모드의 모든 아카이브에 대해 작동합니다.pg_dump -j.