Известные проблемы и ограничения при миграции из PostgreSQL в База данных Azure для PostgreSQL

В следующих разделах описываются известные проблемы и ограничения, связанные с сетевыми миграциями из PostgreSQL в базу данных Azure для PostgreSQL.

Настройка сетевой миграции

  • На исходном сервере должен использоваться PostgreSQL версии 9.4, 9.5, 9.6, 10 или 11. (дополнительные сведения см. в статье Поддерживаемые версии в базе данных Azure для PostgreSQL);

  • Поддерживаются только миграции на ту же или более позднюю версию. Например, поддерживается миграция PostgreSQL 9.5 в База данных Azure для PostgreSQL 9.6 или 10. Переход с PostgreSQL 11 на PostgreSQL 9.6 не поддерживается.

  • Чтобы включить логическую репликацию в исходном файле PostgreSQL postgresql.conf, задайте следующие параметры:

    • wal_level. Задайте как логический.
    • max_replication_slots. Установите по крайней мере максимальное число баз данных для миграции. Если вы хотите перенести четыре базы данных, задайте для параметра значение не менее 4.
    • max_wal_senders. Задайте количество баз данных, работающих одновременно. Мы рекомендуем использовать значение 10.
  • Добавьте IP-адрес агента DMS в исходный файл PostgreSQL pg_hba.conf.

    1. Запишите IP-адрес DMS после того, как завершите подготовку экземпляра Azure Database Migration Service.

    2. Добавьте IP-адрес в файл pg_hba.conf :

          host    all    172.16.136.18/10    md5
          host    replication postgres    172.16.136.18/10     md5
      
  • Пользователю должна быть присвоена роль РЕПЛИКАЦИИ на сервере, на котором размещается база данных-источник.

  • Схемы исходной и целевой баз данных должны совпадать.

Ограничения размера

  • Вы можете перенести до 1 ТБ данных из PostgreSQL в База данных Azure для PostgreSQL с помощью одной службы DMS.
  • DMS позволяет пользователям выбирать таблицы в базе данных, которую они хотят перенести. Снимок экрана D MS, на котором показан параметр выбора таблиц.

В фоновом режиме существует команда pg_dump , которая используется для получения дампа выбранных таблиц с помощью одного из следующих параметров:

  • -T для включения имен таблиц, выбранных в пользовательском интерфейсе
  • -t для исключения имен таблиц, не выбранных пользователем

Существует максимальное ограничение в 7500 символов, которые можно включить в команду pg_dump после параметра -t или -T . Команда 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) PostgreSQL (RDS) в База данных Azure для PostgreSQL могут возникнуть следующие ошибки:

  • Ошибка. Значение по умолчанию столбца "{column}" в таблице "{table}" базы данных "{database}" на исходном и целевом серверах отличается. It's '{value on source}' on source and '{value on target}' on target" (Значение по умолчанию столбца "{столбец}" в таблице "{таблица}" в базе данных "{база данных}" на исходном сервере не совпадает с таким же параметром на целевом сервере. Это значение "{значение на исходном сервере}" на исходном сервере и "{значение на целевом сервере}" на целевом).

    Ограничение. Эта ошибка возникает, когда значение по умолчанию в схеме столбца отличается в исходной и целевой базах данных.

    Обходной путь. Убедитесь, что схема в целевом объекте соответствует схеме в источнике. Дополнительные сведения о переносе схемы см. в документации по База данных Azure для PostgreSQL по миграции по сети.

  • Ошибка: целевая база данных "{database}" содержит таблицы "{number of tables}", а база данных-источник "{database}" содержит таблицы "{number of tables}". The number of tables on source and target databases should match" (Количество таблиц в целевой базе данных "{база данных}": {количество таблиц}. Количество таблиц в базе данных-источнике "{база данных}": {количество таблиц}. Количество таблиц в базах данных-источнике и целевой базе данных должно совпадать).

    Ограничение. Эта ошибка возникает, когда количество таблиц в исходной и целевой базах данных отличается.

    Обходной путь. Убедитесь, что схема в целевом объекте соответствует схеме в источнике. Дополнительные сведения о переносе схемы см. в документации по База данных Azure для PostgreSQL по миграции по сети.

  • Ошибка. База данных-источник {database} пуста.

    Ограничение: эта ошибка возникает, если база данных-источник пуста. Вероятно, вы выбрали неправильную базу данных в качестве источника.

    Решение: еще раз проверьте базу данных-источник, выбранную для миграции, и повторите попытку.

  • Ошибка. Целевая база данных {база_данных} пуста. Перенос схемы.

    Ограничение: эта ошибка возникает, когда в целевой базе данных нет схемы. Убедитесь, что схема в целевом объекте соответствует схеме в источнике.

    Обходной путь. Убедитесь, что схема в целевом объекте соответствует схеме в источнике. Дополнительные сведения о переносе схемы см. в документации по База данных Azure для PostgreSQL по миграции по сети.

Другие ограничения

  • Имя базы данных не может содержать точку с запятой (;).
  • Захватываемая таблица должна иметь первичный ключ. Если в таблице нет первичного ключа, результат операций записи DELETE и UPDATE будет непредсказуемым.
  • Обновление сегмента первичного ключа игнорируется. Применение такого обновления будет определяться целевым объектом как обновление, которое не обновляло строки. Результатом является запись, записанная в таблицу исключений.
  • Если таблица содержит столбец JSON , любые операции DELETE или UPDATE в этой таблице могут привести к сбою миграции.
  • Перенос нескольких таблиц с одинаковым именем, но в другом случае может привести к непредсказуемой реакции и не поддерживается. Примером может быть использование table1, TABLE1 и Table1.
  • Обработка изменений таблицы DDL [CREATE | ALTER | DROP | TRUNCATE] не поддерживается.
  • В Database Migration Service одно действие миграции может вместить не более четырех баз данных.
  • Перенос таблицы pg_largeobject не поддерживается.