가치 있는 데이터가 포함된 모든 것과 마찬가지로,PostgreSQL데이터베이스를 백업해야 합니다 정기적으로. 절차는 본질적으로 간단하지만, 기본적인 내용을 이해하는 것이 중요합니다 기술 및 가정.
지원에는 근본적으로 다른 세 가지 접근 방식이 있습니다. 위로포스트그레SQL데이터:
SQL덤프
파일 시스템 수준 백업
온라인 백업
각각에는 고유한 장점과 단점이 있습니다.
SQL-dump 방법의 기본 아이디어는 텍스트를 생성하는 것입니다. 서버에 피드백될 때 SQL 명령이 포함된 파일 당시와 동일한 상태로 데이터베이스를 다시 생성합니다. 덤프의.포스트그레SQL유틸리티 프로그램 제공pg_dump이 목적을 위해. 기본 사용법 이 명령의 내용은 다음과 같습니다.
pg_dumpdb이름 아웃파일
보시다시피,pg_dump쓰기 그 결과를 표준 출력으로 출력합니다. 아래에서 이것이 어떻게 이루어지는지 살펴보겠습니다. 유용할 수 있습니다.
pg_dump단골입니다PostgreSQL클라이언트 애플리케이션 (특히 영리한 것이지만). 이것은 당신이 할 수 있다는 것을 의미합니다 액세스 권한이 있는 모든 원격 호스트에서 이 백업 절차를 수행합니다. 데이터베이스. 하지만 기억해두세요pg_dump특수 기능으로는 작동하지 않습니다 권한. 특히 모든 항목에 대한 읽기 액세스 권한이 있어야 합니다. 백업하려는 테이블이 있으므로 실제로는 거의 항상 데이터베이스 수퍼유저로 실행해야 합니다.
어떤 데이터베이스 서버를 지정하려면pg_dump연락해야 합니다. 다음 명령을 사용하세요. 라인 옵션-h호스트그리고-p포트. 기본 호스트는 다음과 같습니다. 로컬 호스트든 무엇이든 상관없습니다PGHOST환경 변수가 지정합니다. 마찬가지로 기본 포트는 다음과 같습니다. 로 표시됨PG포트환경 변수이거나, 실패할 경우 컴파일된 기본값에 따라 결정됩니다. (편리하게도 서버에는 일반적으로 동일한 컴파일된 기본값입니다.)
다른 것과 마찬가지로PostgreSQL클라이언트 애플리케이션,pg_dump기본적으로 데이터베이스 사용자 이름으로 연결됩니다. 현재 운영 체제 사용자 이름과 동일합니다. 재정의하려면 이는 다음 중 하나를 지정합니다.-U옵션 또는 환경 변수 설정PGUSER. 기억해두세요pg_dump연결에는 일반 클라이언트 인증이 적용됩니다 메커니즘(설명됨)제20장).
다음에 의해 생성된 덤프pg_dump내부적으로 일관성이 있습니다. 즉, 데이터베이스 업데이트입니다. 동안pg_dump실행 중입니다. 쓰레기장에 있지 마세요.pg_dump데이터베이스가 작동하는 동안에는 데이터베이스의 다른 작업을 차단하지 않습니다. 일하고 있습니다. (예외적으로 작동해야 하는 작업은 다음과 같은 배타적 잠금을 사용합니다.진공 전체.)
중요:데이터베이스 스키마가 다음에 의존하는 경우 OID(예: 외래 키)를 지시해야 합니다.pg_dumpOID 덤프 뿐만 아니라. 이렇게 하려면 다음을 사용하세요.-o명령줄 옵션.
다음에 의해 생성된 텍스트 파일pg_dump다음 사용자가 읽을 수 있도록 의도되었습니다.psql프로그램. 는 덤프를 복원하는 일반적인 명령 형식은 다음과 같습니다.
psqldb이름 < 파일
어디에서파일당신은 무엇입니까 다음과 같이 사용됨아웃파일에 대한pg_dump명령. 는 데이터베이스db이름않을 것입니다 이 명령으로 생성된 경우 다음에서 직접 생성해야 합니다.템플릿0실행 전psql(예: 와createdb -T template0db이름). psql다음과 유사한 옵션을 지원합니다pg_dump제어용 데이터베이스 서버 위치 및 사용자 이름. 참조psql의 자세한 내용은 참조 페이지를 참조하세요.
대상 데이터베이스가 이전에 이미 존재해야 할 뿐만 아니라 복원 실행을 시작하지만 복원을 수행하는 모든 사용자도 마찬가지입니다. 덤프된 데이터베이스에 있는 개체를 소유하거나 권한을 부여받았습니다. 객체에 대한 권한. 그렇지 않으면 복원이 수행됩니다. 원래 소유권으로 객체를 다시 생성하지 못합니다. 및/또는 권한. (때로는 이것이 당신이 원하는 것이지만, 일반적으로 그렇지 않습니다.)
복구되면 실행하는 것이 현명합니다.분석각 데이터베이스에 있으므로 최적화 프로그램에는 유용한 통계가 있습니다. 이를 수행하는 쉬운 방법은 다음과 같습니다. 실행vacuumdb -a -z에진공 분석모든 데이터베이스; 이것은 달리기와 동일진공 분석수동으로.
의 능력pg_dump그리고psql쓰거나 읽다 파이프를 사용하면 데이터베이스를 직접 덤프할 수 있습니다. 한 서버에서 다른 서버로; 예를 들면:
pg_dump -h호스트1 db이름| psql -h호스트2 db이름
중요:다음에 의해 생성된 덤프pg_dump다음에 상대적입니다.템플릿0. 이는 어떤 언어든, 절차 등이 추가됨템플릿1또한 버릴 것입니다pg_dump. 그 결과, 젠 토토할 때 사용자 정의를 사용하는 경우템플릿1, 비어 있는 항목을 생성해야 합니다. 데이터베이스의 출처템플릿0에서와 같이 위의 예입니다.
대량의 데이터를 로드하는 방법에 대한 조언PostgreSQL효율적으로, 참조PostgreSQL : 문서 : 8.1 : 스포츠 토토 사이트를 채우는.
위의 메커니즘은 다음과 같은 경우에는 번거롭고 부적절합니다. 전체 데이터베이스 클러스터 백업. 이러한 이유로토토 꽁 머니 PostgreSQL프로그램이 제공됩니다.pg_dumpall각각 백업 특정 클러스터의 데이터베이스를 유지하고 클러스터 전체에도 보존합니다. 사용자, 그룹 등의 데이터. 이것의 기본 사용법 명령은 다음과 같습니다:
pg_dumpall 아웃파일
결과 덤프는 다음을 사용하여 복원할 수 있습니다.psql:
psql -f파일포스트그레
(실제로 기존 데이터베이스 이름을 지정할 수 있습니다. 시작하지만 빈 클러스터에 다시 로드하는 경우포스트그레일반적으로 사용되어야 합니다.) 다음과 같은 경우 항상 데이터베이스 수퍼유저 액세스 권한이 필요합니다. 복원 중pg_dumpall덤프, 이는 사용자 및 그룹을 복원하는 데 필요하기 때문입니다. 정보.
이후포스트그레SQL허용합니다 시스템의 최대 파일 크기보다 큰 테이블 그러한 테이블을 파일로 덤프하는 것은 문제가 될 수 있습니다. 결과 파일은 최대 크기보다 클 가능성이 높습니다. 귀하의 시스템에서 허용됩니다. 이후pg_dump표준에 쓸 수 있음 출력이 발생하면 표준 Unix 도구를 사용하여 문제를 해결할 수 있습니다. 이 문제가 발생할 수 있습니다.
압축 덤프를 사용하세요.당신이 좋아하는 것을 사용할 수 있습니다 예를 들어 압축 프로그램gzip.
pg_dumpdb이름| 압축파일 이름.gz
다음으로 새로고침
생성된 DBdb이름gunzip -c파일 이름.gz | psqldb이름
또는
고양이파일 이름.gz | 총집합 | psqldb이름
사용분할.그분할명령을 사용하면 분할할 수 있습니다. 크기가 허용 가능한 조각으로 출력됩니다. 기본 파일 시스템. 예를 들어 1개의 덩어리를 만들려면 메가바이트:
pg_dumpdb이름| 분할 -b 1m -파일 이름
다음으로 새로고침
생성된 DBdb이름고양이파일 이름* | psqldb이름
사용자 정의 덤프 형식을 사용하십시오.만약PostgreSQL다음 시스템을 기반으로 구축되었습니다.zlib압축 라이브러리가 설치되면 사용자 정의 덤프 형식이 압축됩니다. 출력 파일에 데이터를 기록합니다. 이것은 생산할 것입니다 사용하는 것과 유사한 덤프 파일 크기gzip, 하지만 다음과 같은 추가 이점이 있습니다. 테이블을 선택적으로 복원할 수 있습니다. 다음 명령 사용자 정의 덤프 형식을 사용하여 데이터베이스를 덤프합니다.
pg_dump -Fcdb이름 파일 이름
사용자 정의 형식 덤프는 다음을 위한 스크립트가 아닙니다.psql, 대신 젠 토토해야 함 와 함께pg_restore. 참조토토 핫 postgresql : 문서 : 8.1 : pg_dump그리고pg_restore참조 페이지 세부사항.