Итак, у меня есть миграция с Flyway, успешно примененная много лет назад к более старой версии MariaDB.
Более новая версия MariaDB теперь более строгая и вызывает ошибку при той же миграции. Существует законная проблема с этой миграцией, которую я хочу исправить как для новых запусков с базовой линии (например, сборка в моей среде CI или на ноутбуке нового devleoper), так и для всех моих существующих баз данных (до того, как я попытаюсь обновить их до более новая версия MariaDB, которая может просто потерпеть неудачу).
Какое правильное решение?
- Измените миграцию и добавьте новую, которая выполняет то же самое исправление (еще одну ALTER TABLE ...), которая фактически будет пустяком для вновь созданных БД, но исправит мои существующие вещи.
- Добавить новую версию с миграцией, вышедшую из строя, непосредственно перед сломанной, что решает проблему. Надеемся, что это означает, что новые БД будут применяться так же, как и перед прерванной миграцией, а существующие установки будут применять их перед любой из моих новых миграций?
Если говорить точнее, проблема заключалась в том, что я переносил таблицу, которая первоначально использовала ENGINE=MyISAM ROW_FORMAT=FIXED
в ENGINE=InnoDB
- MariaDB 10.1 принимает это, но более новые выпуски MariaDB, по-видимому, терпят неудачу, если я также не добавлю ROW_FORMAT=DEFAULT
.
Базовый
CREATE TABLE FOO ( ... )
ENGINE=MyISAM ROW_FORMAT=FIXED;
Поздняя миграция
ALTER TABLE FOO
ENGINE=InnoDB;
Этот последний оператор не выполняется в более новой версии MariaDB (и, возможно, для MySQL, не уверен?).
Это утверждение работает, хотя:
ALTER TABLE FOO
ENGINE=InnoDB ROW_FORMAT=DEFAULT;
Проблема в том, что предыдущий оператор внутренне пытается сделать что-то вроде этого, что не получается:
CREATE TABLE FOO ( ... )
ENGINE=InnoDB ROW_FORMAT=FIXED;