AlloyDB for PostgreSQL にデータをインポートおよびエクスポートする場合は、次のベスト プラクティスを考慮してください。
- インポートまたはエクスポートに Cloud Storage のリクエスト元による支払いバケットを使用しない。
- SQL ダンプファイルの作成時に正しいフラグを使用する。
- コスト削減のためデータを圧縮する
- データをバッチで処理することにより、長時間にわたるインポート プロセスおよびエクスポート プロセスを削減する。
- インポートしたデータベースを確認する。
Cloud Storage リクエスト元による支払いバケットを使用しない
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 からターゲット データベースを作成した場合、スキーマ権限が原因でデータのインポートが失敗することがあります。 |
この問題を解決するには、次のコマンドを使用して、データをインポートするユーザーに
GRANT ALL ON SCHEMA public TO my_import_user;
|
| インポート オペレーションに時間がかかりすぎる。 | アクティブな接続が多すぎると、インポート オペレーションが妨げられる可能性があります。 |
次のようにしてください。
|
| ダンプファイルで参照されているユーザーのうち、1 人以上が存在しないため、インポート オペレーションが失敗します。 | ダンプファイルをインポートする前に、オブジェクトを所有しているデータベース ユーザーか、ダンプされたデータベース内のオブジェクトに対する権限が付与されているデータベース ユーザーすべてがターゲット データベース内に存在している必要があります。そうでない場合、インポート オペレーションを実行すると、元の所有権または権限でのオブジェクトの再作成に失敗します。 | インポートする前に、必要なデータベース ユーザーを作成します。 |
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 を使用して個々のテーブルをエクスポートすることを検討してください。 |
| エクスポートに時間がかかりすぎる。 | プライマリ インスタンスでエクスポートに時間がかかりすぎる場合は、エクスポートのサイズが大きすぎる可能性があります。 | データを小さなバッチ単位でエクスポートすることを検討してください。たとえば、1 回のオペレーションでデータベース全体をエクスポートするのではなく、テーブルを個別にエクスポートします。pg_dump ツールを使用して、読み取りプール インスタンスに接続されたクライアントから手動でエクスポートすることもできます。 |
pg_restore ログで Create Extension エラーが発生する、またはインポートが失敗する。 |
ダンプファイルに、AlloyDB でサポートされていない PostgreSQL 拡張機能、またはクラスタにインストールされていない PostgreSQL 拡張機能への参照が含まれています。 | 参照を削除するには、ダンプファイルを編集するか、AlloyDB がサポートしている場合はクラスタに拡張機能をインストールします。 |
pg_dumpall の使用中にエラーが発生する。 |
--globals-only などのフラグを使用する pg_dumpall ユーティリティには、AlloyDB で使用できない権限が必要になる場合があります。 |
パスワードを含めずにユーザーやロールなどのグローバル オブジェクトをエクスポートするには、次のコマンドを使用して
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 ベースのインポート オペレーションまたはエクスポート オペレーションは、一度に 1 件しか実行できません。 | 現在のオペレーションが完了してからリクエストを試してください。 |
次のステップ
- ダンプファイルを使用してデータをインポートする。
- ダンプファイルを使用してデータをエクスポートする。
- CSV ファイルを使用してデータをインポートする。
- CSV ファイルを使用してデータをエクスポートする。
- SQL ファイルを使用してデータをインポートする。
- SQL ファイルを使用してデータをエクスポートする。
- 自動バックアップを有効にする。
- バックアップから復元する。