pg_dump, pg_dumpall, pg_restore를 사용하여 내보내기 및 가져오기

이 페이지에서는 pg_dump, pg_dumpall, pg_restore를 사용하여 데이터를 내보내고 Cloud SQL 인스턴스로 가져오는 방법을 설명합니다.

시작하기 전에

내보내기는 데이터베이스 리소스를 사용하지만 인스턴스가 프로비저닝되지 않는 한 일반적인 데이터베이스 작업에 지장을 주지 않습니다.

권장사항은 데이터 가져오기 및 내보내기 권장사항을 참조하세요.

가져오기 작업을 완료한 후 결과를 확인합니다.

pg_dump, pg_dumpall, pg_restore 유틸리티에 대해 자세히 알아보세요.

PostgreSQL용 Cloud SQL에서 데이터 내보내기

Cloud SQL을 사용하여 Google Cloud 콘솔, gcloud CLI 또는 API에서 내보내기를 수행할 수 있습니다.

  • 단일 PostgreSQL 데이터베이스를 내보내려면 pg_dump 유틸리티를 사용합니다.
  • 클러스터의 모든 PostgreSQL 데이터베이스를 내보내려면 pg_dumpall 유틸리티를 사용합니다.

두 유틸리티를 사용하는 경우 필요한 옵션을 사용하여 결과 내보내기 파일을 Cloud SQL로 다시 가져올 수 있는지 확인합니다.

pg_dump를 사용하여 온프레미스 PostgreSQL 서버에서 데이터 내보내기

Cloud SQL에서 관리하지 않는 데이터베이스를 내보낸 후 나중에 Cloud SQL로 가져오려면 pg_dump 유틸리티를 다음 플래그와 함께 사용합니다.

  • --no-owner

    소유권 변경 명령어는 덤프 파일에 포함되면 안 됩니다.

  • --format

    덤프 파일이 pg_restore와 함께 사용되는 경우 customdirectory 형식이 허용됩니다.

    plain-text 형식의 경우 대신 SQL dump file로 내보냅니다. 이 형식은 pg_restore와 호환되지 않으며 Google Cloud 콘솔 가져오기 명령어나 psql 클라이언트를 사용하여 이 형식을 가져와야 합니다.

  • --no-acl

    덤프가 SUPERUSER 역할의 멤버십을 부여하거나 취소하는 문을 포함하는 경우 이 플래그가 필요합니다.

  • --clean

    이 선택적 플래그를 사용하면 데이터베이스 객체를 가져오기 전에 삭제하는 데 필요한 DROP <object> SQL 문을 포함할 수 있습니다.

  • --if-exists

    이 선택적 플래그를 사용하면 clean 플래그로 생성된 각 DROP 문과 함께 IF EXISTS SQL 문을 포함할 수 있습니다.

또한 다음을 모두 삭제해야 합니다.

  • Cloud SQL에서 지원하는 확장 프로그램 관련 구문. 지원되는 확장 프로그램 목록은 PostgreSQL 확장 프로그램을 참조하세요.
  • plpgsql을 참조하는 CREATE EXTENSION 또는 DROP EXTENSION 문. 이 확장 프로그램은 Cloud SQL Postgres 인스턴스에 사전 설치되어 제공됩니다.
  • COMMENT ON EXTENSION

데이터베이스 설정에 따라 기본 인코딩이 데이터에 적합한지 확인합니다. 필요한 경우 --encoding 플래그로 기본값을 재정의할 수 있습니다.

PostgreSQL용 Cloud SQL에서 custom 형식을 사용하여 데이터 내보내기

커스텀 형식을 사용하려면 명령줄에서 pg_dump를 실행합니다.

pg_dump \
-U USERNAME \
--format=custom \
--no-owner \
--no-acl \
DATABASE_NAME > DATABASE_NAME.dmp

PostgreSQL용 Cloud SQL에서 파일 여러 개에서 동시에 데이터 내보내기

directory 출력 형식만 사용하여 파일 여러 개에서 데이터를 동시에 내보낼 수 있습니다.

동시에 내보내려면 -j NUM_CORES 플래그를 사용합니다. NUM_CORES는 소스 인스턴스의 코어 수입니다.

모든 데이터베이스 내보내기

pg_dumpall은 클러스터의 모든 PostgreSQL 데이터베이스를 단일 스크립트 파일로 추출할 수 있는 유틸리티입니다. 이 파일에는 데이터베이스를 복원하는 데 사용할 수 있는 SQL 명령어가 있습니다.

Cloud SQL 인스턴스에서 모든 PostgreSQL 데이터베이스를 내보내려면 다음 필수 플래그와 함께 pg_dumpall 유틸리티를 사용합니다.

  • exclude-database=cloudsqladmin
  • exclude-database=template*

pg_dumpall 유틸리티는 cloudsqladmin 또는 template 데이터베이스에 액세스할 수 없습니다.

모든 PostgreSQL 데이터베이스를 내보내려면 다음 명령어를 실행합니다.

pg_dumpall \
-h HOST_NAME -l DATABASE_NAME –exclude-database=cloudsqladmin \
–exclude-database=template* > pg_dumpall.sql

pg_dumpall로 역할을 덤프할 때 역할 비밀번호를 보려면 PostgreSQL 역할 이름으로 cloudsql.pg_authid_select_role 플래그를 설정합니다. 역할이 있으면 pg_authid 테이블에 대한 읽기 전용(SELECT) 액세스 권한이 있습니다. 이 테이블에는 역할 비밀번호가 포함되어 있습니다.

가져오기

pg_restore 유틸리티를 사용하여 보관 파일을 Cloud SQL 데이터베이스로 가져옵니다. pg_restorepg_dump에서 생성된 custom 또는 directory 형식의 보관 파일에서만 작동합니다. pg_restore에 대해 자세히 알아보기

custom 형식으로 생성된 덤프 파일에서 PostgreSQL용 Cloud SQL로 가져오기

덤프 파일이 커스텀 형식으로 생성된 경우 다음 명령어를 실행합니다.

pg_restore \
--list DATABASE_NAME.dmp | sed -E 's/(.* EXTENSION )/; \1/g' >  DATABASE_NAME.toc

sed 후속 처리는 SQL 덤프 파일의 모든 확장 프로그램 문을 주석 처리합니다.

pg_restore를 사용하여 가져올 때 명령줄 인수 '--use-list=DATABASE_NAME.toc'를 사용하여 처리된 목차를 지정합니다.

파일 여러 개에서 PostgreSQL용 Cloud SQL로 데이터 동시에 가져오기

directorycustom 출력 형식을 사용하여 만든 보관 파일에만 파일 여러 개에서 데이터를 동시에 가져올 수 있습니다.

병렬로 가져오려면 -j NUM_CORES 플래그를 사용합니다. NUM_CORES는 대상 인스턴스의 코어 수입니다.

PostgreSQL용 Cloud SQL의 가져오기 성능

다음 단계