3.6. SQL 덤프를 사용하여 PostgreSQL 데이터 백업
SQL 덤프 방법은 SQL 명령을 사용하여 덤프 파일을 생성하는 방법을 기반으로 합니다. 덤프가 데이터베이스 서버에 다시 업로드되면 덤프 당시와 동일한 상태로 데이터베이스를 다시 생성합니다.
SQL 덤프는 다음 PostgreSQL 클라이언트 애플리케이션에 의해 보장됩니다.
-
pg_dump
는 역할 또는 테이블 공간에 대한 클러스터 전체 정보가 없는 단일 데이터베이스를 덤프합니다. -
pg_dumpall
은 지정된 클러스터의 각 데이터베이스를 덤프하고 역할 및 테이블 공간 정의와 같은 클러스터 전체 데이터를 유지합니다.
기본적으로 pg_dump
및 pg_dumpall
명령은 결과를 표준 출력에 작성합니다. 덤프를 파일에 저장하려면 출력을 SQL 파일로 리디렉션합니다. 결과 SQL 파일은 텍스트 형식 또는 병렬 처리를 허용하는 다른 형식 및 개체 복원에 대한 보다 자세한 제어가 될 수 있습니다.
데이터베이스에 액세스할 수 있는 원격 호스트에서 SQL 덤프를 수행할 수 있습니다.
3.6.1. SQL 덤프의 이점 및 단점 링크 복사링크가 클립보드에 복사되었습니다!
SQL 덤프는 다른 PostgreSQL 백업 방법과 비교하여 다음과 같은 이점이 있습니다.
-
SQL 덤프는 서버 버전에 한정되지 않은 유일한 PostgreSQL 백업 방법입니다.
pg_dump
유틸리티의 출력은 이후 버전의 PostgreSQL으로 다시 로드할 수 있으며 이는 파일 시스템 수준 백업 또는 연속 보관에서는 불가능합니다. - SQL 덤프는 32비트에서 64비트 서버로 이동하는 것과 같이 데이터베이스를 다른 시스템 아키텍처로 전송할 때 작동하는 유일한 방법입니다.
-
SQL 덤프는 내부적으로 일관성 있는 덤프를 제공합니다. 덤프는
pg_dump
가 실행될 때 데이터베이스의 스냅샷을 나타냅니다. -
pg_dump
유틸리티는 실행 중일 때 데이터베이스에서 다른 작업을 차단하지 않습니다.
SQL 덤프의 단점은 파일 시스템 수준 백업에 비해 시간이 더 필요하다는 것입니다.
3.6.2. pg_dump를 사용하여 SQL 덤프 수행 링크 복사링크가 클립보드에 복사되었습니다!
클러스터 전체 정보 없이 단일 데이터베이스를 덤프하려면 pg_dump
유틸리티를 사용합니다.
사전 요구 사항
-
덤프하려는 모든 테이블에 대한 읽기 권한이 있어야 합니다. 전체 데이터베이스를 덤프하려면
postgres
슈퍼유저 또는 데이터베이스 관리자 권한이 있는 사용자로 명령을 실행해야 합니다.
프로세스
클러스터 전체 정보 없이 데이터베이스를 덤프합니다.
pg_dump <db_name> > <dump_file>
$ pg_dump <db_name> > <dump_file>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 연결할 데이터베이스 서버
pg_dump
를 지정하려면 다음 명령줄 옵션을 사용합니다.호스트를 정의하는
-h
옵션입니다.기본 호스트는 로컬 호스트이거나
PGHOST
환경 변수에 의해 지정된 항목입니다.포트를 정의하는
-p
옵션입니다.기본 포트는
PGPORT
환경 변수 또는 컴파일된 상태로 표시됩니다.
3.6.3. pg_dumpall을 사용하여 SQL 덤프 수행 링크 복사링크가 클립보드에 복사되었습니다!
지정된 데이터베이스 클러스터에서 각 데이터베이스를 덤프하고 클러스터 전체 데이터를 유지하려면 pg_dumpall
유틸리티를 사용합니다.
사전 요구 사항
-
postgres
슈퍼유저 또는 데이터베이스 관리자 권한이 있는 사용자로 명령을 실행해야 합니다.
프로세스
데이터베이스 클러스터에서 모든 데이터베이스를 덤프하고 클러스터 전체 데이터를 유지합니다.
pg_dumpall > <dump_file>
$ pg_dumpall > <dump_file>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 연결할 데이터베이스 서버 pg_dumpall 을 지정하려면 다음 명령줄 옵션을 사용합니다.
호스트를 정의하는
-h
옵션입니다.기본 호스트는 로컬 호스트이거나
PGHOST
환경 변수에 의해 지정된 항목입니다.포트를 정의하는
-p
옵션입니다.기본 포트는
PGPORT
환경 변수 또는 컴파일된 상태로 표시됩니다.기본 데이터베이스를 정의하는
-l
옵션입니다.이 옵션을 사용하면 초기화 중에 자동으로 생성된
postgres
데이터베이스와 다른 기본 데이터베이스를 선택할 수 있습니다.
3.6.4. pg_dump를 사용하여 덤프된 데이터베이스 복원 링크 복사링크가 클립보드에 복사되었습니다!
pg_dump
유틸리티를 사용하여 덤프한 SQL 덤프에서 데이터베이스를 복원하려면 다음 단계를 따르십시오.
사전 요구 사항
-
postgres
슈퍼유저 또는 데이터베이스 관리자 권한이 있는 사용자로 명령을 실행해야 합니다.
프로세스
새 데이터베이스를 생성합니다.
createdb <db_name>
$ createdb <db_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 개체를 소유하거나 덤프된 데이터베이스의 오브젝트에 대한 권한이 부여된 모든 사용자가 이미 있는지 확인합니다. 이러한 사용자가 존재하지 않는 경우 복원에서 원래 소유권 및 권한으로 오브젝트를 다시 생성하지 못합니다.
psql
유틸리티를 실행하여pg_dump
유틸리티로 생성된 텍스트 파일 덤프를 복원합니다.psql <db_name> < <dump_file>
$ psql <db_name> < <dump_file>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 여기서
<dump_file
>은pg_dump
명령의 출력입니다. 비 텍스트 파일 덤프를 복원하려면 대신pg_restore
유틸리티를 사용합니다.pg_restore <non-plain_text_file>
$ pg_restore <non-plain_text_file>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.6.5. pg_dumpall을 사용하여 덤프된 데이터베이스 복원 링크 복사링크가 클립보드에 복사되었습니다!
pg_dumpall
유틸리티를 사용하여 덤프한 데이터베이스 클러스터에서 데이터를 복원하려면 다음 단계를 따르십시오.
사전 요구 사항
-
postgres
슈퍼유저 또는 데이터베이스 관리자 권한이 있는 사용자로 명령을 실행해야 합니다.
프로세스
- 개체를 소유하거나 덤프된 데이터베이스의 개체에 대한 권한이 부여된 모든 사용자가 있는지 확인합니다. 이러한 사용자가 존재하지 않는 경우 복원에서 원래 소유권 및 권한으로 오브젝트를 다시 생성하지 못합니다.
psql
유틸리티를 실행하여pg_dumpall
유틸리티에서 생성한 텍스트 파일 덤프를 복원합니다.psql < <dump_file>
$ psql < <dump_file>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 여기서
<dump_file
>은pg_dumpall
명령의 출력입니다.
3.6.6. 다른 서버에서 데이터베이스의 SQL 덤프 수행 링크 복사링크가 클립보드에 복사되었습니다!
pg_dump
및 psql
이 파이프로 직접 작성하고 읽을 수 있기 때문에 데이터베이스를 직접 덤프할 수 있습니다.
프로세스
한 서버에서 다른 서버로 데이터베이스를 덤프하려면 다음을 실행합니다.
pg_dump -h <host_1> <db_name> | psql -h <host_2> <db_name>
$ pg_dump -h <host_1> <db_name> | psql -h <host_2> <db_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.6.7. 복원 중 SQL 오류 처리 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 psql
은 SQL 오류가 발생하면 계속 실행되므로 데이터베이스가 부분적으로만 복원됩니다.
기본 동작을 변경하려면 덤프를 복원할 때 다음 방법 중 하나를 사용합니다.
사전 요구 사항
-
postgres
슈퍼유저 또는 데이터베이스 관리자 권한이 있는 사용자로 명령을 실행해야 합니다.
프로세스
ON_ERROR_STOP
변수를 설정하여 SQL 오류가 발생하면 종료 상태 3을 사용하여psql
을 종료합니다.psql --set ON_ERROR_STOP=on <db_name> < <dump_file>
$ psql --set ON_ERROR_STOP=on <db_name> < <dump_file>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 복원이 완전히 완료되거나 취소되도록 전체 덤프가 단일 트랜잭션으로 복원되도록 지정합니다.
psql
유틸리티를 사용하여 텍스트 파일 덤프를 복원하는 경우:psql -1
$ psql -1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow pg_restore
유틸리티를 사용하여 텍스트가 아닌 파일 덤프를 복원하는 경우:pg_restore -e
$ pg_restore -e
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
이 방법을 사용하면 약간의 오류라도 이미 여러 시간 동안 실행된 복원 작업을 취소할 수 있습니다.