알려진 문제

이 페이지에는 PostgreSQL용 Cloud SQL의 알려진 문제와 이러한 문제를 피하거나 복구하는 방법이 나와 있습니다.

인스턴스에서 문제가 발생하는 경우 문제 진단의 정보도 검토해야 합니다.

인스턴스 연결 문제

  • 만료된 SSL/TLS 인증서

    인스턴스가 SSL을 사용하도록 구성된 경우 Google Cloud 콘솔의 Cloud SQL 인스턴스 페이지로 이동하여 인스턴스를 엽니다. 인스턴스의 연결 페이지를 열고 보안 탭을 선택한 후 서버 인증서가 유효한지 확인합니다. 만료된 경우 새 인증서를 추가하고 새 인증서로 순환시켜야 합니다.

  • Cloud SQL 인증 프록시 버전

    Cloud SQL 인증 프록시로 연결하는 경우 가장 최근 버전을 사용하고 있는지 확인합니다. 자세한 내용은 Cloud SQL 인증 프록시를 최신 상태로 유지를 참조하세요.

  • 연결이 승인되지 않음

    해당 프로젝트에 존재하지 않는 인스턴스에 연결하려고 할 경우 해당 인스턴스에 액세스할 수 있는 권한이 없다는 오류 메시지만 표시됩니다.

  • Cloud SQL 인스턴스를 만들 수 없음

    Failed to create subnetwork. Router status is temporarily unavailable. Please try again later. Help Token: [token-ID] 오류 메시지가 표시되면 Cloud SQL 인스턴스를 다시 만들어 보세요.

  • 다음이 기본 사용자('postgres')에서만 작동함. gcloud sql connect --user

    이 명령어를 다른 사용자와 연결하려는 경우 FATAL: database 'user' does not exist라는 오류 메시지가 표시됩니다. 해결 방법은 기본 사용자('postgres')를 사용하여 연결한 다음 "\c" psql 명령어를 사용하여 다른 사용자로 다시 연결하는 것입니다.

  • IAM db 프록시 인증이 사용 설정되면 PostgreSQL 연결이 중단됨.

    Cloud SQL Auth 프록시가 TCP 소켓을 사용하여 시작되고 -enable_iam_login 플래그가 포함된 경우 TCP 연결이 진행되는 동안 PostgreSQL 클라이언트가 중단됩니다. 한 가지 해결 방법은 PostgreSQL 연결 문자열에 sslmode=disable을 사용하는 것입니다. 예를 들면 다음과 같습니다.

    psql "host=127.0.0.1 dbname=postgres user=me@google.com sslmode=disable"

    또 다른 해결 방법은 Unix 소켓을 사용하여 Cloud SQL 인증 프록시를 시작하는 것입니다. 그러면 PostgreSQL SSL 암호화가 사용 중지되고 대신 Cloud SQL 인증 프록시가 SSL 암호화를 수행합니다.

관리 문제

  • 인스턴스에서 한 번에 하나의 장기 실행 Cloud SQL 가져오기 또는 내보내기 작업만 실행할 수 있습니다. 작업을 시작할 때 인스턴스에서 다른 작업을 수행할 필요가 없는지 확인하세요. 또한 작업을 시작할 때 취소할 수 있습니다.

    PostgreSQL은 단일 트랜잭션으로 데이터를 가져옵니다. 따라서 가져오기 작업을 취소하면 Cloud SQL에서 가져오기의 데이터가 유지되지 않습니다.

데이터 가져오기 및 내보내기 문제

  • Cloud SQL 인스턴스에서 PostgreSQL 17을 사용하지만 데이터베이스에서 PostgreSQL 16 이하를 사용하는 경우 Cloud SQL을 사용하여 이러한 데이터베이스를 인스턴스로 가져올 수 없습니다. 이를 위해서는 Database Migration Service를 사용하세요.

  • Database Migration Service를 사용하여 PostgreSQL 17 데이터베이스를 Cloud SQL로 가져오는 경우 PostgreSQL 16 데이터베이스로 가져옵니다.

  • PostgreSQL 버전 15 이상에서는 대상 데이터베이스가 template0에서 생성되면 데이터를 가져올 수 없고 permission denied for schema public 오류 메시지가 표시될 수 있습니다. 이 문제를 해결하려면 GRANT ALL ON SCHEMA public TO cloudsqlsuperuser SQL 명령어를 실행하여 cloudsqlsuperuser 사용자에게 공개 스키마 권한을 제공합니다.

  • 많은 대형 객체를 내보내면 인스턴스가 응답하지 않음

    데이터베이스에 대형 객체(blob)가 많이 포함되어 있을 때 데이터베이스를 내보내면 너무 많은 메모리가 소비되어 인스턴스가 응답하지 않습니다. 이러한 문제는 blob이 비어 있어도 발생합니다.

  • Cloud SQL은 맞춤설정된 테이블스페이스를 지원하지 않지만 대상 인스턴스에서 맞춤설정된 테이블 스페이스에서 기본 테이블스페이스인 pg_default로의 데이터 마이그레이션을 지원합니다. 예를 들어 /home/datadbspace라는 테이블스페이스가 있는 경우 마이그레이션 후에 dbspace 내의 모든 데이터는 pg_default로 마이그레이션됩니다. 하지만 Cloud SQL은 디스크에 'dbspace'라는 테이블스페이스를 만들지 않습니다.

  • 대규모 데이터베이스(예: 데이터가 500GB 이상인 데이터베이스)에서 데이터를 가져오고 내보내려는 경우 가져오기 및 내보내기 작업을 완료하는 데 시간이 오래 걸릴 수 있습니다. 또한 가져오기 또는 내보내기가 진행되는 동안 다른 작업(예: 백업 작업)을 수행할 수 없습니다. 가져오기 및 내보내기 프로세스의 성능을 향상시킬 수 있는 옵션은 gcloud 또는 API를 사용하여 이전 백업을 복원하는 것입니다.

  • Cloud Storage는 최대 단일 객체 크기를 5TB까지 지원합니다. 데이터베이스가 5TB보다 크면 Cloud Storage로 내보내기 작업이 실패합니다. 이 경우 내보내기 파일을 보다 작은 세그먼트로 분할해야 합니다.

트랜잭션 로그 및 디스크 증가

로그는 매일 한 번씩 영구 삭제되며, 지속적으로 진행되지 않습니다. 로그 보관 일수가 백업 수와 동일하게 구성된 경우 백업 발생 시점에 따라 1일 치의 로깅이 손실될 수 있습니다. 예를 들어 로그 보관을 7일로 설정하고 백업 보관을 7개로 설정하면 6~7일 동안의 로그가 유지됩니다.

백업 수는 로그 보관 일수보다 최소 1일 이상으로 설정해야 로그 보관 기간을 지정된 최소 일수 이상으로 유지할 수 있습니다.

Cloud Monitoring 또는 Cloud Logging 관련 문제

다음 리전 이름의 인스턴스는 특정 컨텍스트에서 다음과 같이 잘못 표시됩니다.

  • us-central1us-central로 표시됩니다.
  • europe-west1europe으로 표시됩니다.
  • asia-east1asia로 표시됩니다.

이 문제는 다음 상황에서 발생합니다.

  • Cloud Monitoring의 알림
  • 측정항목 탐색기
  • Cloud Logging

리소스 메타데이터 라벨을 사용하여 Cloud Monitoring의 알림과 측정항목 탐색기의 문제를 완화할 수 있습니다. cloudsql_database 모니터링 리소스 라벨 region 대신 시스템 메타데이터 라벨 region을 사용합니다.

psql 클라이언트를 사용하여 Google Cloud 콘솔에서 생성된 데이터베이스를 삭제하면 다음 오류가 발생할 수 있습니다.

ERROR: must be owner of database [DATABASE_NAME]

psql 클라이언트를 사용하여 생성된 데이터베이스의 소유자에게 Cloud SQL superuser 속성이 없으므로 권한 오류입니다. Google Cloud 콘솔을 사용하여 만든 데이터베이스는 cloudsqlsuperuser가 소유하고 psql 클라이언트를 사용하여 만든 데이터베이스는 해당 데이터베이스에 연결된 사용자가 소유합니다. Cloud SQL은 관리형 서비스이므로 고객은 superuser 속성이 있는 사용자를 만들거나 이 사용자로 액세스할 수 없습니다. 자세한 내용은 슈퍼유저 제한사항 및 권한을 참조하세요.

이 제한으로 인해 Google Cloud 콘솔을 사용하여 만든 데이터베이스는 Google Cloud 콘솔을 사용해서만 삭제할 수 있으며 psql 클라이언트를 사용하여 만든 데이터베이스는 데이터베이스 소유자로 연결해야만 삭제할 수 있습니다.

데이터베이스의 소유자를 찾으려면 다음 명령어를 사용합니다.

SELECT d.datname as Name,
pg_catalog.pg_get_userbyid(d.datdba) as Owner
FROM pg_catalog.pg_database d
WHERE d.datname = 'DATABASE_NAME';

다음을 바꿉니다.

  • DATABASE_NAME: 소유자 정보를 찾으려는 데이터베이스의 이름입니다.

데이터베이스 소유자가 cloudsqlsuperuser인 경우Google Cloud 콘솔을 사용하여 데이터베이스를 삭제합니다. 데이터베이스 소유자가 psql 클라이언트 데이터베이스 사용자인 경우 데이터베이스 소유자로 연결하고 DROP DATABASE 명령어를 실행합니다.