Сделать Evolve (миграция БД) Стереть включить все схемы

Я использую Evolve, который основан на Flyway для миграции баз данных. Когда я создаю базу данных с нуля, мои сценарии миграции создают схемы с именами rls и «устаревшие», функцию и процедуру в rls и таблицу в legacy.

Когда я устанавливаю команду Evolve на erase, чтобы стереть мою базу данных, чтобы я мог создать ее с нуля, она сначала дает сбой, потому что у меня есть пара политик безопасности, которые зависят от таблиц, которые, как я полагаю, Evolve не может обнаружить. Поэтому я сам удаляю их и снова создаю свой проект, чтобы запустить команду Erase, и в окне вывода отображается:

4>  Executing Erase...
4>  Evolve initialized.
4>  Successfully erased schema dbo.
4>  Erase schema(s) completed: 1 erased, 0 skipped.

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

[удалить] все объекты базы данных (таблицы, представления...) схем, созданных Evolve или найденных пустыми.

Почему не стирает их?


person xr280xr    schedule 22.11.2017    source источник
comment
Просто любопытно — почему вы выбрали Evolve, а не сам Flyway (или ReadyRoll Core, если вы используете VS Enterprise)?   -  person David Atkinson    schedule 28.11.2017
comment
Я новичок в концепциях и потратил на это ‹ 0 часов. Мы не занимаемся CI, и Evolve выглядел так, как будто у него есть то, что нам нужно, и его легко установить и использовать. Я не смог быстро определить, как настроить и начать использовать Flyway с Windows и Visual Studio, и не будет ли это слишком сложно для моей небольшой команды. Итак, короткий ответ: слишком крутая кривая обучения.   -  person xr280xr    schedule 28.11.2017
comment
У вас есть VS Enterprise? Если это так, попробуйте ReadyRoll Core от компании, в которой я работаю, поскольку она имеет глубокую интеграцию с VS, если это важно для вас.   -  person David Atkinson    schedule 29.11.2017
comment
Это выглядит очень мило. Мне нравились инструменты с красными воротами, которые я использовал в прошлом. Я думаю, что у меня есть только VS Professional. Мы не занимаемся CI прямо сейчас, поэтому все, что мне действительно нужно, - это возможность поддерживать локальную базу данных каждого разработчика в актуальном состоянии и возможность избегать коллизий/конфликтов при проверке миграции. Я не уверен, как вы выполняете последнее с помощью ReadyRoll. В эволюции мы просто пожертвовали описанием в имени файла и просто назвали их все v1_X__migration.sql, чтобы имена файлов конфликтовали, указывая на то, что может потребоваться слияние.   -  person xr280xr    schedule 09.12.2017
comment
Итак, вы форсируете конфликт слияния в случае возникновения проблем с дублированием или зависимостью? Это кажется немного суровым. Не могли бы вы вместо этого разрешить возникновение проблемы и обнаружить ее при попытке выполнить миграцию? ReadyRoll выигрывает от непрерывной проверки, поскольку он всегда пытается создать теневую базу данных в фоновом режиме.   -  person David Atkinson    schedule 14.12.2017


Ответы (1)


Вам нужно включить имена схем в аргументы вызова следующим образом:

.\evolve.exe -c "Host=10.10.10.10;Port=5432;Database=a;Username=a;Password=v;Enlist=true" -l .\db -s dbo -s rls -s legacy --metadata-table-schema migrations erase postgresql 

Обратите внимание, что evolution может стирать только схемы, созданные Evolve. В противном случае вы получили эту ошибку:

This schema was not empty when Evolve first started migrations.

Поэтому вам, вероятно, нужно удалить команды «Создать схему» из ваших команд и вместо этого передать имена схем для развития, затем развитие создаст их для вас.

person Jiří Herník    schedule 13.12.2019