2017-01-06 10 views
0

У меня есть база данных postgres, в которой уже определены пользователи и роли. В этой базе данных есть несколько схем, которые контролируются с помощью разных проектов/сценариев пролета. Я работаю над добавлением интеграции Flyway в новый проект, где мы будем использовать встроенный экземпляр Postgres для тестирования.Как обрабатывать DCL в сценариях миграции Flyway?

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

Я уже рассматривал возможность записи функции для этого, но тогда функция должна быть включена в любой проект, который использует встроенные Postgres и должен поддерживаться на нескольких базовых кодах. Это кажется очень неряшливым. Может ли кто-нибудь рекомендовать мне способ обработать эти операции DCL с помощью Flyway, которые будут работать со встроенным подходом, а также с моими операционными базами данных?

+1

Не подходит ли Flyway некоторые предварительные условия, такие как Liquibase? (Миграция будет выполняться только в том случае, если предварительное условие истинно). Или вы можете использовать синтаксис 'insert ... в конфликте ничего не сделайте ', чтобы инструкции не терпели неудачу, если строки уже существуют –

+0

Я ничего не вижу из беглого поиска Google, или что-то очевидное в документации Flyway об этом. Это похоже на довольно важную функцию. – gsteiner

ответ

1

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

Добавьте конфигурацию обратного вызова для тестовой среды и добавьте перед фазой до или после вашего пользователя и роли.

Третье решение использует повторяющиеся сценарии миграции для настройки вашего пользователя и ролей, см. https://flywaydb.org/documentation/migration/repeatable. Используйте эти сценарии в процессе производства и тестирования. Но в этом случае ваш sql должен сделать правильный и повторяемый, иначе вы нарушите производственную среду.

+0

Кажется, что вариант 2 был бы наименее опасным способом сделать это. Поскольку это было бы сделано в обратном вызове, не получилось бы, если роли уже существуют? Как мне сделать обратный вызов только для тестовой среды? Должен ли я использовать отдельный путь к сценариям миграции? – gsteiner

+1

Я думал о Java Callbacks, потому что nwith SQL обратные вызовы являются симулятивными для решения одного. 1. Внесите свой обратный вызов 2. В тестовой среде вы настроите конфигурацию Flyway для использования вашей реализации обратного вызова. Конфигурация зависит от того, как ваша миграция работает на этапе тестирования. Пример с командной строкой см. Https://flywaydb.org/documentation/commandline/migrate 'flyway -callback = your.Callback migrate' –

+0

Все, я вижу. Эта часть изначально была запутана из-за меня, потому что мы используем интеграцию Spring Boot, поэтому не нужно было ничего делать с сценариями миграции. – gsteiner

 Смежные вопросы

  • Нет связанных вопросов^_^