次の方法で共有


PostgreSQL から Azure Database for PostgreSQL へのオンライン移行に関する既知の問題と制限事項

重要

より合理的で効率的な移行エクスペリエンスのため、Azure Database for PostgreSQL の新しい移行サービスを使うことをお勧めします。 このサービスでは、さまざまなソース環境がサポートされているのでプロセスが簡素化され、Azure Database for PostgreSQL に簡単に移行できます。

この記事では、Azure Database Migration Service (DMS) を使用した PostgreSQL から Azure Database for PostgreSQL へのオンライン移行に関する既知の問題と移行の制限事項について説明します。

オンライン移行の構成

  • サポートされている PostgreSQL ソースの最も低いバージョンは 9.4 で、サポートされているターゲットの最も高いバージョンは 14.9 です。

  • 同じバージョンまたはそれ以降のバージョンへの移行のみがサポートされます。 たとえば、PostgreSQL 9.5 から Azure Database for PostgreSQL 9.6 または 10 への移行はサポートされていません。 PostgreSQL 11 から PostgreSQL 9.6 への移行はサポートされていません。

  • ソース PostgreSQL の postgresql.conf ファイルで論理レプリケーションを有効にするには、次のパラメーターを設定します。

    パラメーター 説明
    wal_level 論理として設定します。
    max_replication_slots 移行するデータベースの最大数以上に設定します。 4 つのデータベースを移行する場合は、値を 4 以上に設定します。
    max_wal_senders 同時に実行されているデータベースの数を設定します。 推奨値は 10 です。
  • ソース PostgreSQL の pg_hba.conf に DMS エージェント IP を追加します。

    1. Azure Database Migration Service のインスタンスのプロビジョニングが完了したら、DMS の IP アドレスを書き留めます。

    2. pg_hba.conf ファイルに IP アドレスを追加します。

      host    all    172.16.136.18/10    md5
      host    replication postgres    172.16.136.18/10     md5
      
  • ユーザーは、ソース データベースをホストするサーバー上でレプリケーション ロールを持っている必要があります。

  • ソースとターゲットのデータベース スキーマが一致している必要があります。

サイズ制限

  • 1 つの DMS サービスを使用して、PostgreSQL から Azure Database for PostgreSQL に最大 1 TB のデータを移行できます。
  • DMS を使用すると、ユーザーは移行するデータベース内のテーブルを選択できます。

テーブルを選択するオプションを示す DMS 画面のスクリーンショット。

バックグラウンドには、次のいずれかのオプションを使って、選択したテーブルのダンプを取得する pg_dump コマンドがあります:

  • UI で選択されたテーブル名を含める -T
  • ユーザーにより選択されたテーブル名を除外する -t

-t または -T オプションの後に、pg_dump コマンドの一部として含めることができる最大文字数は 7,500 文字です。 pg_dump コマンドでは、選択したテーブルまたは選択されていないテーブルの文字数のうち、いずれか小さい方が使用されます。 選択したテーブルと選択されていないテーブルの文字数が 7,500 文字を超えると、pg_dump コマンドはエラーで失敗します。

前の例では、pg_dump コマンドは次のようになります:

pg_dump -h hostname -u username -d databasename -T "\"public\".\"table_1\"" -T "\"public\".\"table_2\""

前のコマンドでは、文字数は 55 です (二重引用符、スペース、-T、スラッシュを含む)

データ型の制限事項

制限事項: テーブルに主キーがない場合は、変更がターゲット データベースと同期されない可能性があります。

回避策:移行を続行するには、テーブルの主キーを一時的に設定します。 データの移行が終了したら、主キーを削除します。

AWS RDS PostgreSQL からのオンライン移行の制限事項

Amazon Web Service (AWS) Relational Database (RDS) PostgreSQL から Azure Database for PostgreSQL へのオンライン移行を実行しようとすると、次のエラーが発生する場合があります。

  • Error: The Default value of column '{column}' in table '{table}' in database '{database}' is different on source and target servers. (データベース '{database}' のテーブル '{table}' にある列 '{column}' の既定値が、ソース サーバーとターゲット サーバーで異なります。) It's '{value on source}' on source and '{value on target}' on target.(ソースでは '{value on source}'、ターゲットでは '{value on target}' です。)

    制限事項: このエラーは、列スキーマの既定値がソース データベースとターゲット データベースで異なる場合に発生します。

    回避策: ターゲットのスキーマがソースのスキーマと一致していることを確認してください。 スキーマの移行の詳細については、Azure Database for PostgreSQL のオンライン移行に関するドキュメントを参照してください。

  • エラー: ターゲット データベース '{database}' には '{number of tables}' 個のテーブルが含まれていますが、ソース データベース '{database}' に含まれるテーブルは '{number of tables}' 個です。 ソース データベースとターゲット データベースのテーブル数は同じでなければなりません。

    制限事項: このエラーは、ソース データベースとターゲット データベースのテーブル数が異なる場合に発生します。

    回避策: ターゲットのスキーマがソースのスキーマと一致していることを確認してください。 スキーマの移行の詳細については、Azure Database for PostgreSQL のオンライン移行に関するドキュメントを参照してください。

  • エラー: ソース データベース {database} が空です。

    制限事項: このエラーは、ソース データベースが空の場合に発生します。 間違ったデータベースをソースとして選択したものと考えられます。

    回避策: 移行用に選択したソース データベースを再確認して、もう一度試してください。

  • エラー: ターゲット データベース {database} が空です。 スキーマを移行します。

    制限事項: このエラーは、ターゲット データベースにスキーマがない場合に発生します。 ターゲットのスキーマがソースのスキーマと一致していることを確認してください。

    回避策: ターゲットのスキーマがソースのスキーマと一致していることを確認してください。 スキーマの移行の詳細については、Azure Database for PostgreSQL のオンライン移行に関するドキュメントを参照してください。

その他の制限事項

  • データベース名にセミコロン (;) を含めることはできません。

  • キャプチャしたテーブルには主キーが必要です。 テーブルに主キーがない場合、DELETE および UPDATE レコード操作の結果は予測できません。

  • 主キー セグメントの更新は無視されます。 このような更新を適用すると、ターゲットでは、どの行も更新しなかった更新として識別されます。 その結果、例外テーブルにレコードが書き込まれます。

  • テーブルに JSON 列がある場合、このテーブルに対する DELETE 操作または UPDATE 操作によって移行が失敗する可能性があります。

  • 同じ名前だが大文字と小文字が異なる複数のテーブルの移行は、予期しない動作が発生する可能性があるため、サポートされていません。 たとえば、table1、TABLE1、Table1 を使用する場合です。

  • [ CREATE | ALTER | DROP | TRUNCATE ] テーブル DDL の変更処理はサポートされていません。

  • Database Migration Service では、1 つの移行アクティビティで最大 4 つのデータベースにのみ対応できます。

  • pg_largeobject テーブルの移行はサポートされていません。