この文書では、psql コマンドを使用して PostgreSQL データバックアップファイルをターゲット RDS に復元する方法について説明します。

背景情報

PostgreSQL は論理バックアップをサポートしています。 PostgreSQL データをインポートするには、pg_dump 論理バックアップ機能を使用してバックアップファイルをエクスポートしてから、そのファイルを psql を介して RDS にインポートします。

前提条件

ホワイトリストが設定され、インターネット IP アドレスが適用され、RDS インスタンス用のデータベースとアカウントが作成されています。 詳細については、「クイック スタート」をご参照ください。

ローカルデータを準備します。

  1. PostgreSQL クライアントからローカルの PostgreSQL データベースに接続します。
  2. 次のコマンドを実行して、データをバックアップします。
    pg_dump -U username -h hostname -p port databasename -f filename

    パラメーターは次のとおりです。

    • username: ローカルデータベースのユーザー名
    • hostname: ローカルデータベースのホスト名。 ローカルデータベースのホストにログインしている場合は、 localhost を使用できます。
    • port: ローカルデータベースポート番号
    • databasename: バックアップするローカルデータベースの名前
    • "filename": 生成されるバックアップファイルの名前

    たとえば、データベースアカウント William を使ってローカル PostgreSQL データベースをバックアップする場合、PostgreSQL ホストへログインし、次のコマンドを実行します。

    pg_dump -U William -h localhost -p 3433 pg001 -f pg001.sql

データを移行します。

イントラネットを使ってデータを復元すると、ネットワークの安定性とデータセキュリティが向上します。 データを ECS にアップロードしてから、イントラネットを使って対象 RDS にデータを復元することを推奨します。 データファイルが大きすぎる場合は、アップロードする前に圧縮してください。 このシナリオは、次の例で説明しています。
  1. ECS にログインします。
  2. PostgreSQL クライアントで次のコマンドを実行し、データを RDS にインポートします。
    psql -U username -h hostname -d desintationdb -p port -f dumpfilename.sql

    パラメーターは次のとおりです。

    • username: RDS のPostgreSQL データベースユーザー名
    • hostname: RDS の PostgreSQL データベースアドレス
    • port: RDS の PostgreSQL データベースポート番号
    • databasename: RDS の PostgreSQL データベース名
    • filename: ローカルバックアップデータのファイル名

    例:

    psql -U William -h postgresql.rds.aliyuncs.com -d pg001 -p 3433 -f pg001.sql

    RDS データベースの権限設定はローカルデータベースの権限設定と矛盾しているため、データのインポート中に権限関連の警告やエラーが発生する場合があります。 たとえば、以下のような警告やエラーは無視することができます。

    WARNING: no privileges could be revoked for "xxxxx"
    ERROR: role "xxxxx" does not exist