このトピックでは、 pg_dump コマンドと pg_restore コマンドを実行することによって、ユーザーが作成した PostgreSQL データベースから PostgreSQLのPOLARDB にデータを移行する方法について説明します。

ApsaraDB RDS for PostgreSQL データベースからデータを移行する方法の詳細については、「ユーザー作成 PostgreSQL データベースから POLARDB for PostgreSQL へのデータの移行」をご参照ください。

前提条件

POLARDB for PostgreSQL インスタンスは、ApsaraDB RDS for PostgreSQL インスタンスのストレージ容量よりも大きいストレージ容量である必要があります。

注意事項

これはフル移行です。 データの不一致を避けるために、移行前に ApsaraDB RDS for PostgreSQL データベースに関連したサービスを停止し、書き込み操作を停止します。

準備

  1. Linux ECS インスタンスを作成します。 この例では、64 ビット Ubuntu 16.04 を実行する ECS インスタンスを使用します。 詳細は、「ECS インスタンスの作成」をご参照ください。
    • ECS インスタンスと対象の POLARDB for PostgreSQL インスタンスは、同じ VPC 内にある必要があります。
    • 従量課金 ECS インスタンスを作成して移行後にリリースすることができます。
  2. ECS インスタンスに PostgreSQL をインストールして、データ復元コマンドを実行します。 詳細は、「PostgreSQL 公式ドキュメント」をご参照ください。
    インストールされている PostgreSQL データベースのバージョンが、ApsaraDB RDS for PostgreSQL データベースのバージョンと同じであることを確認します。

ステップ 1:ApsaraDB RDS for PostgreSQL データベースをバックアップする

これはフル移行です。 データの不一致を避けるために、移行前に ApsaraDB RDS for PostgreSQL データベースに関連したサービスを停止し、書き込み操作を停止します。

  1. ECS インスタンスで次のコマンドを実行して、データベースのデータをバックアップします。
    pg_dump -U <username> -h <hostname> -p <port> <dbname> -Fd -j <njobs> -f <dumpdir>

    パラメーターの説明

    • <username>:ApsaraDB RDS for PostgreSQL データベースへのログインに使用されるアカウント。
    • <hostname>:ApsaraDB RDS for PostgreSQL データベースのエンドポイントである localhost をローカルホストに使用できます。
    • <port>:データベースサービスのポート番号。
    • <dbname>:接続するデータベースの名前。 デフォルト値は、postgres です。
    • <njobs>:並行して実行するバックアップジョブの数。
      • <njobs> パラメーターを指定すると、ダンプ時間を短縮できますが、データベースサーバーの負荷も増加します。
      • ApsaraDB RDS for PostgreSQL データベースが 9.2 より古い場合、 --no-synchronized-snapshots パラメーターを指定する必要があります。
    • <dumpdir>:生成されたバックアップファイルのディレクトリ。
    例:
    pg_dump -U postgres -h localhost -p 5432 postgres -Fd -j 5 -f postgresdump
  2. Password: プロンプトにパスワードを入力して、データのバックアップを開始します。
  3. バックアップが完了するまでお待ちください。 PostgreSQL データベースのデータは、指定されたディレクトリにバックアップされます。 この例では、データは postgresdump ディレクトリに格納されています。

ステップ 2:データを POLARDB for PostgreSQL に移行する

  1. ECS インスタンスから POLARDB for PostgreSQL データベースに接続します。
    psql -U <username> -h <hostname> -p <port> -d <dbname>

    パラメーターの説明

    • <username>: POLARDB for PostgreSQL データベースへのログインに使用されるアカウント。
    • <hostname>:POLARDB for PostgreSQL インスタンスのプライマリエンドポイント (プライベートネットワーク)。 詳細については、「接続エンドポイントの表示」をご参照ください。
    • <port>:データベースサービスのポート番号。 デフォルト値は [1921] です。
    • <dbname>:接続するデータベースの名前。

    例:

    psql -h pc-mxxxxxxxx.pg.polardb.cn-qd-pldb1.rds.aliyuncs.com -p 3433 -d postgres -U gctest
  2. 移行元の ApsaraDB RDS for PostgreSQL データベースのロール情報に基づいて、移行先の POLARDB for PostgreSQL インスタンスにロールを作成し、移行先データベースにデータ復元の権限を付与します。 詳細については、公式ドキュメントの「ロールの作成」と「付与」をご参照ください。
  3. ECS インスタンスで次のコマンドを実行して、ソースデータベースのデータを POLARDB for PostgreSQL インスタンスに移行します。
    pg_restore -U <username> -h <hostname> -p <port> -d <dbname> -j <njobs> <dumpdir>

    パラメーターの説明

    • <username>: POLARDB for PostgreSQL データベースへのログインに使用されるアカウント。
    • <hostname>:POLARDB for PostgreSQL インスタンスのプライマリエンドポイント (プライベートネットワーク)。
    • <port>:データベースサービスのポート番号。 デフォルト値は [1921] です。
    • <dbname>:接続してデータを復元する移行先データベースの名前。
      移行先データベースが使用可能である必要があります。 使用可能でない場合は、移行先インスタンスのデータベースを作成します。
    • <njobs>:並行して実行するデータ復元ジョブの数。
      このパラメーターを指定すると、データの復元時間を短縮できますが、データベースサーバーの負荷も増加します。
    • <dumpdir>:バックアップファイルが配置されているディレクトリ。

    例:

    pg_restore -U gctest -h pc-mxxxxxxxx.pg.polardb.cn-qd-pldb1.rds.aliyuncs.com -p 1921 -d postgres -j 6 postgresdump
  4. Password: プロンプトにパスワードを入力して、データ移行を開始します。
    パスワードを忘れた場合のパスワードの変更方法については、「データベースアカウントのパスワードをリセット」をご参照ください。

データの移行が完了するまでお待ちください。