Сложная миграция с Oracle на Postgres. Глава 2.
#Oracle #Postgres #ora2pg #миграция #легаси
Итак, первый запуск на DEV, где актуальная схема, но почти нет данных. Запустили миграцию, и уже на второй таблице ora2pg начал забивать логи ошибками.
Оказалось, что данные во второй таблице были связаны ключами с данными в третьей, которая ещё не была скопирована. Встал вопрос о последовательности копирования таблиц. Сначала должны идти справочники, затем второй уровень, третий и так далее. Чтобы не копаться вручную, я сделал запрос к dictionary, который для каждой таблицы определял её иерархию по внешним ключам и количество уровней.
У справочников уровень равен 0 — это базовые таблицы, которые не зависят ни от каких других. Уровень 1 у тех, которые ссылаются только на справочники, 2 — ссылаются на 1 и могут ссылаться на 0, и так далее. В итоге оказалось, что у одной из таблиц степень иерархии достигла 7.
Таким образом была выстроена последовательность загрузки таблиц — сначала копируются с уровнем 0, потом 1 и так далее до 7. Это обеспечило консистентность на уровне ключей.
Однако...
Оказалось, что ora2pg принудительно сортирует перечисленные в белом списке таблицы. Причем режимов сортировки несколько, но нет возможности использовать именно ту последовательность, которая указана в самом настроечном файле. Таким образом ни сортировка по умолчанию, ни по имени таблицы, ни другие варианты не подошли, потому что в любом случае нарушался порядок загрузки связанных между собой таблиц.
Решение вопроса в следующей главе.
· 04.06
Я бы покопал в сторону отключения FK… Правда нужна валидации после…
ответить
коммент удалён
· 04.06
Да, я, конечно, об этом тоже думал. Но здесь это не помогло бы. Куча дополнительных вещей по ограничению данных. Не старше 3 лет и тд и тп. Ну и плюс возможность того, что оно после копирования не поднимется, а это означает завалить прод 🤷
ответить
ответ удалён
· 04.06
Значит, остается только цикл на одной таблице — он как раз закрывает обе страховки: порядок гарантирован, ошибка постоянна сразу, прод не трогается до полной проверки.. )))
ответить
ответ удалён
· 04.06
У меня есть продолжение, гляньте ☺️ https://set.ki/post/SXksnpC
ответить
ответ удалён