Make Evolve(数据库迁移)擦除包括所有模式

时间:2017-11-22 01:21:22

标签: visual-studio-2017 database-migration sql-server-2016 flyway

我正在使用基于Flyway的Evolve进行数据库迁移。当我从头创建数据库时,我的迁移脚本创建了名为rls和'legacy'的模式,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模式中的所有对象都已消失,但rlslegacy中的对象仍然存在,包括模式本身。因此,如果我现在将命令切换回migrate以从头开始创建数据库,那么当它尝试创建这些对象时它会爆炸,因为它们已经存在。根据它应该

的文件
  

[擦除]模式的所有数据库对象(表,视图...)   由Evolve创建或发现为空。

为什么不删除它们?

1 个答案:

答案 0 :(得分:0)

您需要在调用参数中包括如下模式名称:

.\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 

请注意,evolve仅能擦除由Evolve创建的架构。否则,您会收到此错误:

This schema was not empty when Evolve first started migrations.

因此,您可能需要从命令中删除“创建模式”命令,而是传递要演化的模式名称,然后Evolution会为您创建它们。