Сложная миграция с Oracle на Postgres. Глава 2.

#Oracle #Postgres #ora2pg #миграция #легаси

Итак, первый запуск на DEV, где актуальная схема, но почти нет данных. Запустили миграцию, и уже на второй таблице ora2pg начал забивать логи ошибками.

Оказалось, что данные во второй таблице были связаны ключами с данными в третьей, которая ещё не была скопирована. Встал вопрос о последовательности копирования таблиц. Сначала должны идти справочники, затем второй уровень, третий и так далее. Чтобы не копаться вручную, я сделал запрос к dictionary, который для каждой таблицы определял её иерархию по внешним ключам и количество уровней.

У справочников уровень равен 0 — это базовые таблицы, которые не зависят ни от каких других. Уровень 1 у тех, которые ссылаются только на справочники, 2 — ссылаются на 1 и могут ссылаться на 0, и так далее. В итоге оказалось, что у одной из таблиц степень иерархии достигла 7.

Таким образом была выстроена последовательность загрузки таблиц — сначала копируются с уровнем 0, потом 1 и так далее до 7. Это обеспечило консистентность на уровне ключей.

Однако...

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

Решение вопроса в следующей главе.

Сложная миграция с Oracle на Postgres. Глава 2. | Сетка — социальная сеть от hh.ru