このページでは、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 EXISTS
SQL ステートメントを含めることができます。
また、次のものをすべて削除する必要があります。
- 拡張関連のステートメント(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=cloudsqladmin
exclude-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 ユーティリティに関する詳細
- インポートとエクスポートの既知の問題