我正在使用基于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
模式中的所有对象都已消失,但rls
和legacy
中的对象仍然存在,包括模式本身。因此,如果我现在将命令切换回migrate
以从头开始创建数据库,那么当它尝试创建这些对象时它会爆炸,因为它们已经存在。根据它应该
[擦除]模式的所有数据库对象(表,视图...) 由Evolve创建或发现为空。
为什么不删除它们?
答案 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会为您创建它们。