【发布时间】:2018-05-05 15:23:56
【问题描述】:
我正在使用基于 Flyway 的 Evolve 进行数据库迁移。当我从头开始创建数据库时,我的迁移脚本会创建名为 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 以从头开始创建数据库,那么当它尝试创建这些对象时它会爆炸,因为它们已经存在。根据文档,它应该是
[erase] 模式的所有数据库对象(表、视图...) 由 Evolve 创建或发现为空。
为什么不删除它们?
【问题讨论】:
-
只是好奇 - 你为什么选择 Evolve 而不是 Flyway 本身(或 ReadyRoll Core,如果你使用 VS Enterprise)?
-
我是这些概念的新手,花在上面的时间 。我们没有做 CI,Evolve 看起来就像我们需要的一样,而且易于安装和使用。我无法快速确定如何在 Windows 和 Visual Studio 中设置和开始使用 Flyway,或者它对我的小团队来说是否过于复杂。这么长的回答简短:学习曲线太陡了。
-
你有 VS Enterprise 吗?如果是这样,请尝试我工作的公司的 ReadyRoll Core,因为如果这对您很重要,它具有深度 VS 集成。
-
看起来真不错。我喜欢我过去使用的红门工具。我想我只有 VS Professional。我们现在不做 CI,所以我真正需要的是让每个开发人员的本地 Db 保持最新的能力,以及在签入迁移时避免冲突/冲突的能力。我不确定您如何使用 ReadyRoll 完成后者。在进化中,我们只是牺牲了在文件名中使用描述并将它们全部命名为 v1_X__migration.sql 以便文件名会发生冲突以表明可能需要合并。
-
所以你是在强制合并冲突以防出现重复或依赖问题?这似乎有点苛刻。当您尝试执行迁移时,您能否允许问题发生并发现它? ReadyRoll 受益于持续验证,因为它总是尝试在后台构建“影子”数据库。
标签: visual-studio-2017 database-migration sql-server-2016 flyway evolve