데이터 가져오기 및 내보내기 권장사항

PostgreSQL용 AlloyDB로 데이터를 가져오고 내보낼 때는 다음 권장사항을 고려하세요.

  • 가져오기 또는 내보내기에 Cloud Storage 요청자 지불 버킷을 사용하지 마세요.
  • SQL 덤프 파일을 만들 때 올바른 플래그를 사용합니다.
  • 데이터를 압축하여 비용을 절감합니다.
  • 데이터를 일괄적으로 처리하여 장기 실행 가져오기 및 내보내기 프로세스를 줄입니다.
  • 가져온 후 가져온 데이터베이스를 확인합니다.

Cloud Storage 요청자 지불 버킷 사용 금지

AlloyDB로 가져오거나 AlloyDB에서 내보내기에 요청자 지불이 사용 설정된 Cloud Storage 버킷은 사용할 수 없습니다. AlloyDB는 가져오기 및 내보내기를 수행하기 위해 Google 관리 서비스 계정인 서비스 에이전트를 사용합니다. 이 에이전트에는 일반적으로 데이터 액세스에 대해 요청자의 프로젝트에 요금을 청구할 컨텍스트나 구성이 없으므로 요청자 지불 버킷이 포함된 작업이 실패합니다.

SQL 덤프 파일을 만들 때 올바른 플래그 사용

SQL 덤프 파일로 데이터를 내보낼 때 올바른 플래그와 옵션을 사용하지 않으면 가져오기가 실패할 수 있습니다. AlloyDB로 가져올 데이터를 내보내는 방법에 대한 자세한 내용은 DMP 파일 내보내기SQL 파일 내보내기를 참고하세요.

데이터를 압축하여 비용 절감

AlloyDB는 Cloud Storage에서 압축된 .gz 파일을 가져오고 내보낼 수 있도록 지원합니다. 특히 많은 양의 데이터를 내보낼 때 파일을 압축하면 Cloud Storage에서 차지하는 저장공간 및 스토리지 비용을 상당 부분 절약할 수 있습니다. AlloyDB API를 사용하여 SQL 덤프 파일 또는 CSV 파일을 내보낼 때 대상 URI에서 .gz 파일 확장자를 사용하여 데이터를 압축하세요. .gz 확장자가 있는 파일을 가져오면 파일이 자동으로 압축 해제됩니다.

장기 실행 가져오기 및 내보내기 프로세스 줄이기

데이터 크기에 따라 AlloyDB로 가져오고 AlloyDB에서 내보내는 작업은 완료하는 데 많은 시간이 걸릴 수 있습니다. 작업에 시간이 너무 오래 걸리면 다른 작업이 차단될 수 있습니다.

더 작은 데이터 배치를 사용하여 각 작업을 완료하는 데 걸리는 시간을 줄입니다. pg_dump 도구를 사용하여 읽기 풀 인스턴스에 연결된 클라이언트에서 수동으로 내보낼 수도 있습니다.

가져온 데이터베이스 확인

가져오기 작업이 완료된 후 psql 또는 다른 클라이언트를 사용하여 데이터베이스에 연결하고 테이블을 나열하거나 행 수를 쿼리하는 등 적절한 명령어를 실행하여 콘텐츠가 올바른지 확인합니다.

내보내기 작업 자동화

AlloyDB는 내보내기를 자동화하는 내장된 메서드를 제공하지 않지만 Cloud Scheduler, Pub/Sub, Cloud Run Functions와 같은 다른Google Cloud 구성요소를 사용하여 자동화 도구를 빌드할 수 있습니다.

문제 해결

이 섹션에서는 가져오기 및 내보내기 작업에서 발생할 수 있는 문제에 대한 권장 해결 방법을 제공합니다.

가져오기 작업

문제 설명 권장 해결 방법
ERROR: permission denied for schema public PostgreSQL 15 이상에서는 template0에서 대상 데이터베이스를 만드는 경우 스키마 권한으로 인해 데이터 가져오기가 실패할 수 있습니다.

이 문제를 해결하려면 다음 명령어를 사용하여 데이터를 가져오는 사용자에게 public 스키마에 대한 권한을 부여하세요.

        GRANT ALL ON SCHEMA public TO my_import_user;
        
가져오기 작업이 너무 오래 걸립니다. 활성 연결이 너무 많으면 가져오기 작업을 방해할 수 있습니다.

다음을 시도해 보세요.

  • 사용하지 않는 연결을 닫습니다.
  • 사용 가능한 리소스가 충분한지 확인하려면 인스턴스의 CPU 및 메모리 사용량을 확인하세요.
  • 가져오기에 최대 리소스를 보장하려면 작업을 시작하기 전에 인스턴스를 다시 시작하세요. 이렇게 하면 모든 연결이 닫히고 리소스를 소비할 수 있는 작업이 종료됩니다.
덤프 파일에 참조된 하나 이상의 사용자가 없기 때문에 가져오기 작업이 실패합니다. 덤프 파일을 가져오기 전에 객체를 소유하거나 덤프된 데이터베이스의 객체에 대한 권한이 부여된 모든 데이터베이스 사용자가 대상 데이터베이스에 있어야 합니다. 그렇지 않으면 가져오기 작업이 원래 소유권이나 권한으로 객체를 다시 만들지 못합니다. 가져오기 전에 필요한 데이터베이스 사용자를 만듭니다.
GRANT stderr: ERROR: must be member of role ROLE_NAME 이 오류는 ROLE_NAME이 소유한 객체 또는 ROLE_NAME에 부여된 권한이 포함된 SQL 덤프 파일을 가져오지만 가져오기를 수행하는 데이터베이스 사용자가 ROLE_NAME의 구성원이 아닌 경우 발생할 수 있습니다. 이 문제를 해결하려면 대상 데이터베이스에 ROLE_NAME 역할이 있는지 확인하고 가져오기를 실행하기 전에 가져오기를 수행하는 사용자에게 ROLE_NAME의 멤버십을 부여하세요.

내보내기 작업

문제 설명 권장 해결 방법
HTTP Error 403: The service account does not have the required permissions for the bucket. AlloyDB 서비스 계정에 대상 버킷에 필요한 권한이 없습니다. 대상 Cloud Storage 버킷이 있고 AlloyDB 서비스 계정에 roles/storage.objectAdmin 또는 roles/storage.objectCreator 역할이 부여되어 있는지 확인합니다. 이러한 역할을 통해 버킷에 쓸 수 있습니다. Cloud Storage의 Identity and Access Management(IAM) 역할을 참고하세요.
CSV 내보내기에 성공했지만 SQL 내보내기에 실패했습니다. CSV 형식과 SQL 형식은 내보내기 방식이 서로 다릅니다. SQL 형식은 데이터베이스 스키마와 데이터를 내보내며 일반적으로 시간이 더 오래 걸립니다. CSV 형식은 사용자가 제공한 SELECT 쿼리에서 생성된 데이터만 내보냅니다. SQL 내보내기가 실패하거나 너무 느린 경우 CSV를 사용하여 개별 테이블을 내보내는 것이 좋습니다.
내보내기가 너무 오래 걸림 기본 인스턴스에서 내보내기가 너무 오래 걸리면 내보내기 파일이 너무 큰 것일 수 있습니다. 데이터를 더 작은 배치로 내보내는 것이 좋습니다. 예를 들어 한 번의 작업으로 전체 데이터베이스를 내보내는 대신 테이블을 개별적으로 내보냅니다. pg_dump 도구를 사용하여 읽기 풀 인스턴스에 연결된 클라이언트에서 수동으로 내보낼 수도 있습니다.
Create Extension 오류가 pg_restore 로그에 표시되거나 가져오기에 실패합니다. 덤프 파일에 AlloyDB에서 지원하지 않거나 클러스터에 설치되지 않은 PostgreSQL 확장 프로그램에 대한 참조가 있습니다. 참조를 삭제하려면 덤프 파일을 수정하거나 AlloyDB에서 지원하는 경우 클러스터에 확장 프로그램을 설치합니다.
pg_dumpall 사용 오류 --globals-only와 같은 플래그가 있는 pg_dumpall 유틸리티에는 AlloyDB에서 사용할 수 없는 권한이 필요할 수 있습니다.

비밀번호 없이 사용자 및 역할과 같은 전역 객체를 내보내려면 다음 명령어를 사용하여 --no-role-passwords 플래그를 포함합니다.

        pg_dumpall --globals-only --no-role-passwords
        
내보내기 작업이 타임아웃되거나 Connection reset by peer가 표시됩니다. Cloud Storage가 특정 기간 내에 데이터를 수신하지 않으면 연결이 재설정될 수 있습니다. 내보내기에 필요한 초기 데이터베이스 쿼리를 실행하는 데 시간이 너무 오래 걸리는 경우 이러한 문제가 발생할 수 있습니다. 이 경우 읽기 풀 인스턴스에 연결된 클라이언트에서 pg_dump 도구를 사용하여 수동으로 내보내기를 시도해 보세요.

일반적인 문제

문제 설명 권장 해결 방법
HTTP Error 409: Operation failed because another operation was already in progress. 시스템에서는 한 번에 하나의 API 기반 가져오기 또는 내보내기 작업만 허용합니다. 현재 작업이 완료된 후 요청을 시도하세요.

다음 단계