Как изменить файл миграции, который был применен некоторое время назад? - PullRequest
0 голосов
/ 08 октября 2019

Проблема: У нас есть 2 файла миграции, которые создали таблицы с использованием функций в базе данных postgres. Эти таблицы были созданы год назад, и после этого у нас много новых миграций. Исходя из наших новых стандартов, мы запрещаем использование слова в названии таблицы.

Пример: Мы не допускаем, чтобы таблицы будущих таблиц назывались _audit. Созданные таблицы были названы «abc_audit» и «def_audit».

Запрет '_audit' встроен в последнюю функцию, которая создает таблицы. Мы не можем просто изменить имя таблицы, так как docker раскручивает всю новую базу данных и запускает все файлы миграции и рассматривает только последнюю функцию, которая предотвращает имя таблицы '_audit' и не может выполнить первоначальную миграцию.

Какмы решаем это? Мы не хотим пересматривать исходные данные и терять историю.

1 Ответ

0 голосов
/ 09 октября 2019

Похоже, вам нужно включить эту функцию соответствия имен в управление версиями.

  • Удалить функцию из базы данных
  • Создать версионную миграцию, которая создает функцию
  • Дайте новой миграции версию, чтобы она работала в правильном порядке
    • Если у вас было V1__abc_audit.sql и V2__def_audit.sql, а затем V3__something_else.sql, назовите вашу новую миграцию V2_1__naming_function.sql

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

Для существующих развертываний Flyway я предлагаю использоватьопция конфигурации 'out of order' . Вы можете сделать следующее:

  • Удалить функцию из базы данных
  • Установить flyway.outOfOrder в true
  • Запустить миграцию

Опция 'out of order' означает, что Flyway запустит новую миграцию в правильном порядке, несмотря на то, что она является более низкой версией, чем развернутая в настоящее время версия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...