pg_dump、pg_dumpall、pg_restore を使用したエクスポートとインポート

このページでは、pg_dump、pg_dumpall、pg_restore を使用して Cloud SQL インスタンスにデータをエクスポートおよびインポートする方法について説明します。

始める前に

エクスポートではデータベース リソースが使用されますが、インスタンスがプロビジョニングされていない限り、エクスポートによって通常のデータベース オペレーションが妨げられることはありません。

ベスト プラクティスについては、データのインポートとエクスポートのベスト プラクティスをご覧ください。

インポート オペレーションが完了したら、結果を確認します。

pg_dumppg_dumpallpg_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 のインポート パフォーマンス

次のステップ