このページには、Cloud SQL for PostgreSQL の既知の問題と、これらの問題を回避したり、これらの問題から復旧したりする方法が記載されています。
インスタンスに関する問題が発生している場合は、問題の診断の情報もご覧ください。インスタンス接続の問題
- 期限切れの SSL / TLS 証明書 - SSL を使用するようにインスタンスを構成している場合は、 Google Cloud コンソールで Cloud SQL インスタンス ページに移動して、インスタンスを開きます。[接続] ページを開き、[セキュリティ] タブを選択して、サーバー証明書が有効であることを確認します。期限切れの場合は、新しい証明書を追加してローテーションする必要があります。 
- Cloud SQL Auth Proxy のバージョン - Cloud SQL Auth Proxy を使用して接続する場合は、最新のバージョンを使用していることを確認してください。詳細については、Cloud SQL Auth Proxy の最新状態の維持をご覧ください。 
- 接続する権限がない - 接続しようとしているインスタンスがそのプロジェクトに存在しない場合、そのインスタンスにアクセスする権限がないというエラー メッセージが表示されます。 
- 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 接続がハングします。 - -enable_iam_loginフラグを指定し、TCP ソケットを使用して Cloud SQL Auth Proxy を起動する場合、TCP 接続中に PostgreSQL クライアントがハングします。回避策の 1 つは、PostgreSQL 接続文字列で- sslmode=disableを使用することです。次に例を示します。- psql "host=127.0.0.1 dbname=postgres user=me@google.com sslmode=disable" - もう 1 つの回避策は、Unix ソケットを使用して Cloud SQL Auth Proxy を起動することです。これにより、PostgreSQL SSL 暗号化がオフになり、代わりに Cloud SQL Auth Proxy が SSL 暗号化を行います。 
管理に関する問題
- Cloud SQL のインポートまたはエクスポートを長時間実行する場合は、1 インスタンスに対して一度に 1 つのオペレーションしか実行できません。オペレーションを開始するときは、インスタンスに対して他のオペレーションを行う必要がないことを確認してください。また、オペレーションの開始時にキャンセルすることもできます。 - PostgreSQL は 1 回のトランザクションでデータをインポートします。したがって、インポート オペレーションをキャンセルした場合、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 cloudsqlsuperuserSQL コマンドを実行して、- cloudsqlsuperuserユーザーに公開スキーマ権限を付与します。
- サイズの大きい多数のオブジェクトをエクスポートすると、インスタンスが応答しなくなる - データベースにサイズの大きい多数のオブジェクト(blob)が含まれていると、データベースをエクスポートする際に大量のメモリが消費され、インスタンスが応答しなくなる可能性があります。これは、blob が空であっても発生する場合があります。 
- Cloud SQL はカスタマイズされたテーブルスペースをサポートしていませんが、カスタマイズされたテーブルスペースから宛先インスタンスのデフォルトのテーブルスペース - pg_defaultへのデータ移行はサポートしています。たとえば、- /home/dataに- dbspaceという名前のテーブルスペースを所有している場合、移行後- dbspace内のすべてのデータは- pg_defaultに移行されます。ただし Cloud SQL では、ディスク上に「dbspace」という名前のテーブルスペースは作成されません。
- 大規模なデータベース(たとえば、500 GB 以上のデータを持つデータベース)からデータのインポートとエクスポートをしようとすると、インポートとエクスポートのオペレーションが完了するまでに長い時間がかかることがあります。さらに、インポートやエクスポートの実行中は、他のオペレーション(バックアップ オペレーションなど)を実行できません。 - gcloudまたは API を使用して以前のバックアップを復元すると、インポートとエクスポートのプロセスのパフォーマンスを向上できます。
- Cloud Storage は、最大 5 テラバイトの単一オブジェクト サイズをサポートしています。5 TB を超えるデータベースの場合、Cloud Storage へのエクスポート オペレーションは失敗します。その場合は、エクスポート ファイルを小さなセグメントに分割する必要があります。
トランザクション ログとディスクの増大
ログは継続的ではなく、1 日 1 回削除されます。ログの保持日数とバックアップ数が同じ値で構成されていると、バックアップが発生するタイミングによっては、1 日分のロギングが失われる可能性があります。たとえば、ログ保持期間を 7 日に設定し、保持するバックアップの数を 7 に設定すると、6~7 日分のログが保持されます。
バックアップの数は、保持するログの日数より 1 以上大きい数に設定することをおすすめします。
Cloud Monitoring または Cloud Logging に関連する問題
次のリージョン名のインスタンスは、次のように、特定の状況では正しく表示されません。
- us-central1は- us-centralと表示されます。
- europe-west1は- europeと表示されます。
- asia-east1は- asiaと表示されます。
この問題は、次の状況で発生します。
- Cloud Monitoring のアラート
- Metrics Explorer
- Cloud Logging
リソース メタデータ ラベルを使用して、Cloud Monitoring のアラートと Metrics Explorer の問題を軽減できます。cloudsql_database のモニタリング対象リソースラベル region ではなく、システム メタデータ ラベル region を使用します。
PostgreSQL データベースの削除に関する問題
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 コマンドを実行します。