Лучший способ для скриптов sql для конкретных баз данных с помощью Flyway

Я начал использовать Flyway в моем текущем проекте для миграции баз данных, и мне это очень нравится. В настоящее время я использую Oracle в PROD- и Derby в TEST-Environment.

Довольно скоро я столкнулся с проблемой команд sql, специфичных для базы данных, например

  • ALTER TABLE T1 MODIFY F1 VARCHAR(256); на Oracle vs
  • ALTER TABLE T1 ALTER F1 SET DATA TYPE VARCHAR(256); на Дерби.

Я не вижу способа написать sql "независимый от поставщика изменить таблицу, изменить тип данных столбца".

Как лучше всего решить эту проблему с помощью Flyway?


person Peti    schedule 28.11.2012    source источник


Ответы (2)


Вы можете использовать свойство flyway.locations.

В тесте он будет выглядеть так:

flyway.locations=sql/common,sql/derby

и в продукте:

flyway.locations=sql/common,sql/oracle

Тогда у вас могут быть общие операторы (V1__Create_table.sql) в общих и разные копии операторов, специфичных для БД (V2__Alter_table.sql), в местах, связанных с базой данных.

На мой взгляд, даже лучшее решение - иметь одну и ту же БД в продукте и тесте. Да, вы немного теряете производительность, но, с другой стороны, вы также устраняете еще одно различие (и потенциальный источник ошибок) между средами.

person Axel Fontaine    schedule 29.11.2012
comment
Спасибо Акселю за быстрый ответ! - person Peti; 29.11.2012
comment
Возможно, стоит поместить где-нибудь в FAQ по пролетным путям? - person Peti; 29.11.2012
comment
Решение Акселя сверху работает нормально. Я обнаружил одну крошечную проблему, о которой нужно знать: я использовал flyway.locations = db / migration / common, db / migration / oracle и flyway.locations = db / migration / common, db / migration / derby, и это испортило устаревшие baseDir в один большой объединенный db / migration. - person Peti; 29.11.2012
comment
Ты прав. Это прискорбно, но будет решено само по себе в версии 3.0, как только все устаревшие вещи будут удалены. - person Axel Fontaine; 29.11.2012
comment
Исправление зарегистрировано. - person Axel Fontaine; 19.12.2012
comment
Если вы используете Spring, вы можете поместить flyway.locations в файл конфигурации, используемый Spring (PropertySource), и установить его в bean-компоненте Flyway с помощью объекта среды. - person Manuel Palacio; 26.05.2015

Различия в SQL между Oracle и некоторыми из этих настольных баз данных незначительны. Может ли разработчик вставить собственный код для облегченного динамического удаления SQL во время выполнения в зависимости от среды (например, удалить обозначение табличного пространства)?

Я предпочитаю полагаться на этот подход, чтобы каждый разработчик вручную синхронизировал два набора SQL.

person dropofahat    schedule 19.08.2015
comment
Вы должны задать это как отдельный вопрос. Это интересная идея. - person Peti; 20.08.2015
comment
хорошая идея Пей - созданный вопрос: stackoverflow.com/questions/ 32121083 / - person dropofahat; 20.08.2015