このページでは、pg_dump、pg_dumpall、pg_restore を使用して Cloud SQL インスタンスにデータをエクスポートおよびインポートする方法について説明します。
始める前に
エクスポートではデータベース リソースが使用されますが、インスタンスがプロビジョニングされていない限り、エクスポートによって通常のデータベース オペレーションが妨げられることはありません。
ベスト プラクティスについては、データのインポートとエクスポートのベスト プラクティスをご覧ください。
インポート オペレーションが完了したら、結果を確認します。
pg_dump、pg_dumpall、pg_restore ユーティリティの詳細を確認します。
Cloud SQL for PostgreSQL からデータをエクスポートする
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での使用を目的としている場合、custom形式とdirectory形式を使用できます。plain-text形式の場合、代わりにSQL dump fileにエクスポートします。この形式はpg_restoreと互換性がないため、 Google Cloud コンソールのインポート コマンドまたはpsqlクライアントを使用してインポートする必要があります。--no-aclこのフラグは、
SUPERUSERロールのメンバーシップを付与または取り消すステートメントがダンプに含まれている場合に必要です。--cleanこのオプションのフラグを使用すると、データベース オブジェクトをインポートする前に削除(クリーンアップ)するために必要な
DROP <object>SQL ステートメントを含めることができます。--if-existsこのオプションのフラグを使用すると、
cleanフラグによって生成される各DROPステートメントにIF EXISTSSQL ステートメントを含めることができます。
また、次のものをすべて削除する必要があります。
- 拡張関連のステートメント(Cloud SQL がその拡張機能をサポートしていない場合)。サポートされている拡張機能のリストについては、PostgreSQL の拡張機能をご覧ください。
- plpgsql を参照する
CREATE EXTENSIONまたはDROP EXTENSIONステートメント。この拡張機能は、Cloud SQL Postgres インスタンスにプリインストールされています。 COMMENT ON EXTENSIONステートメント。
データベースの設定で指定されているデフォルトのエンコードがデータに適していることを確認します。必要に応じて、--encoding フラグを使用してデフォルトをオーバーライドできます。
Cloud SQL for PostgreSQL から custom 形式を使用してデータをエクスポートする
カスタム形式を使用するには、コマンドラインから pg_dump を実行します。
pg_dump \ -U USERNAME \ --format=custom \ --no-owner \ --no-acl \ DATABASE_NAME > DATABASE_NAME.dmp
Cloud SQL for PostgreSQL から、複数のファイルから並行してデータをエクスポートする
directory 出力形式を使用できるのは、複数のファイルから並行してデータをエクスポートする場合のみです。
並行してエクスポートするには、-j NUM_CORES フラグを使用します。NUM_CORES は、ソース インスタンスのコア数です。
すべてのデータベースをエクスポートする
pg_dumpall は、クラスタ内のすべての PostgreSQL データベースを 1 つのスクリプト ファイルに抽出できるユーティリティです。このファイルには、データベースの復元に使用できる SQL コマンドが含まれています。
Cloud SQL インスタンス内のすべての PostgreSQL データベースをエクスポートするには、次の必須フラグを指定して pg_dumpall ユーティリティを使用します。
exclude-database=cloudsqladminexclude-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 を使用してロールをダンプする際にロールのパスワードを表示するには、cloudsql.pg_authid_select_role フラグを PostgreSQL ロール名に設定します。ロールが存在する場合は、pg_authid テーブルへの読み取り専用(SELECT)アクセス権が付与されています。このテーブルに、ロールのパスワードがあります。
インポート
pg_restore ユーティリティを使用して、アーカイブを Cloud SQL データベースにインポートします。pg_restore は、pg_dump により作成された custom 形式または directory 形式のアーカイブでのみ機能します。pg_restore の詳細をご確認ください。
custom 形式で作成したダンプファイルから Cloud SQL for PostgreSQL にインポートする
ダンプファイルがカスタム形式で作成されている場合は、次のコマンドを実行します。
pg_restore \ --list DATABASE_NAME.dmp | sed -E 's/(.* EXTENSION )/; \1/g' > DATABASE_NAME.toc
sed の後処理により、SQL ダンプファイル内のすべての拡張ステートメントがコメントアウトされます。
pg_restore を使用してインポートする場合は、コマンドライン引数 --use-list=DATABASE_NAME.toc を使用して、処理された目次を指定します。
複数のファイルから Cloud SQL for PostgreSQL に並行してデータをインポートする
複数のファイルから並行してデータをインポートできるのは、directory および custom 出力形式を使用して作成されたアーカイブに限られます。
並行してインポートするには、-j NUM_CORES フラグを使用します。NUM_CORES は、宛先インスタンスのコア数です。
Cloud SQL for PostgreSQL のインポート パフォーマンス
次のステップ
- インポートとエクスポートの各オペレーションのステータスのチェック方法について学習する
- データのインポートとエクスポートのベスト プラクティスについて確認する
- PostgreSQL の pg_dump ユーティリティに関する詳細
- インポートとエクスポートの既知の問題