WedX - журнал о программировании и компьютерных науках

Flyway Migrate [SQL] — обработка зависимостей объектов

У меня есть существующая база данных, которую я помещаю в систему управления версиями и собираюсь использовать Flyway для обработки миграций.

Правильно это или нет, но некоторые представления, функции и хранимые процедуры зависят друг от друга.

Моя исходная файловая структура следует этому формату;

R__SP__StoredProcOne
R__SP__StoredProcTwo
R__UDF__UserDefinedFunctionOne
R__UDF__UserDefinedFunctionTwo
R__V__ViewOne
R__V__ViewTwo

Примером моей проблемы является то, что R__UDF__UserDefinedFunctionOne зависит от R__UDF__UserDefinedFunctionTwo. Но из-за их имен функция R__UDF__UserDefinedFunctionOne мигрирует первой, из-за чего Flyway выдает ошибку о том, что ее невозможно найти.

Я смягчил эту проблему, введя дополнительную нумерацию, чтобы принудительно установить порядок миграции.

Но я чувствую, что должен быть лучший способ сделать это или настройка в Flyway, которая позволит ему мигрировать независимо от порядка файлов.

Я пробовал параметры -mixed=true и -group=true, но безрезультатно.

07.07.2020

Ответы:


1

Повторяемые миграции всегда должны выполняться последними. Это означает, что помимо зависимостей в этих повторяющихся миграциях все другие существующие зависимости уже должны быть на месте.

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

09.07.2020

2

Я думал об этом вопросе недавно. Я хотел бы написать больше, чем сейчас, и, возможно, вернусь к редактированию позже. Я все еще изучаю пролетный путь, вы можете заказать по папкам? Мои мысли предполагают, что вы можете. (И вполне возможно, что вы не можете смотреть сейчас.)

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

Хранимые процедуры иногда зависят от функций, поэтому, если они запускаются после папки, полной функций, это нормально.

Теперь о хранимых процедурах, которые вызывают другие хранимые процедуры: скажем, есть 2 процесса, которые зависят от другого процесса. И этот один процесс, от которого они оба зависят, не зависит ни от чего другого. (или, может быть, это зависит от функции.) Мы можем поместить такие процедуры в другую папку в папке функций. и эти процессы всегда запускаются перед всеми теми другими процессами, которые от них зависят.

Но допустим, у вас есть:

        A
      /   \
    B       C
  /   \       \
D       E       F

Где это график зависимостей proc. Что касается левой половины, мы можем поместить А в вышеупомянутую папку. Но как нам убедиться, что B всегда запускается перед D и E? Я бы сказал, что вы можете сделать 1 из 3 вещей:

  1. Создайте вторую папку для вещей, которые зависят от процесса и от которых зависят другие вещи. Тогда вы не хотите, чтобы дерево зависимостей достигало высоты более 3 уровней.
  2. Поместите B в ту же папку, что и A, и используйте соглашение об именах, чтобы обеспечить порядок. При этом мы уменьшили использование чисел, но стараемся этого избежать.
  3. Держите зависимости на уровне 1 в глубину.

Иногда при извлечении и модуляризации возникает некоторое триггерное счастье. И, возможно, это начинает поднимать голову при использовании таких инструментов.

Как и выше, почему B должен быть собственным процессом? возможно, это должно было быть расширением A. И C определенно не должно было быть чем-то (YAGNI). И это просто перекликается с тем, что вы уже упомянули:

Правильно это или нет, но некоторые представления, функции и хранимые процедуры зависят друг от друга.

21.08.2020
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: wedx@cp9.ru