PostgreSQL から Azure Database for PostgreSQL へのオンライン移行に関する既知の問題と制限事項
重要
より合理的で効率的な移行エクスペリエンスのため、Azure Database for PostgreSQL の新しい移行サービスを使うことをお勧めします。 このサービスでは、さまざまなソース環境がサポートされていることで、プロセスが簡素化されます。Azure Database for PostgreSQL に簡単に移行できます。
PostgreSQL から Azure Database for PostgreSQL へのオンライン移行に関する既知の問題点と制限事項について、後続のセクションで説明します。
オンライン移行の構成
ソースの PostgreSQL サーバーでは、バージョン 9.4、9.5、9.6、10、11 が実行されている必要があります。 詳しくは、「サポートされている PostgreSQL Database バージョン」を参照してください。
同じバージョンまたはそれ以降のバージョンへの移行のみがサポートされます。 たとえば、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 を追加します。
Azure Database Migration Service のインスタンスのプロビジョニングが完了したら、DMS の IP アドレスを書き留めます。
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 を使用すると、ユーザーは移行するデータベース内のテーブルを選択できます。
バックグラウンドには、次のいずれかのオプションを使用して、選択したテーブルのダンプを取得するために使用される 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 テーブルの移行はサポートされていません。