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

PostgreSQL から Azure Database for PostgreSQL へのオンライン移行に関する既知の問題点と制限事項について、後続のセクションで説明します。

オンライン移行の構成

  • ソースの PostgreSQL サーバーでは、バージョン 9.4、9.5、9.6、10、11 が実行されている必要があります。 詳細については、サポートされる PostgreSQL データベース バージョンに関するページをご覧ください。

  • 同じバージョンまたはそれ以降のバージョンへの移行のみがサポートされます。 たとえば、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 を使用すると、ユーザーは移行するデータベース内のテーブルを選択できます。 テーブルを選択するオプションを示す D M S 画面のスクリーンショット。

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

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

-t または -T オプションの後に、pg_dump コマンドの一部として含めることができる最大文字数は 7500 文字です。 pg_dump コマンドでは、選択したテーブルまたは選択されていないテーブルの文字数のうち、いずれか小さい方が使用されます。 選択したテーブルと選択されていないテーブルの文字数が 7500 文字を超えると、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 テーブルの移行はサポートされていません。