0

我们目前在自动构建期间使用数据库项目来确保我们的测试和开发数据库与源代码同步。

在发布配置文件期间,我们注意到了一个问题,我们当前使用的工作流并未完全涵盖该问题,并且很好奇管理此问题的最佳方法。

问题:

我们对数据库模式进行了重新设计,并决定将表 ( ) 中的列 ( name)user移动到新表 ( userdetail) 中。新userdetail表需要 table 上列的现有内容,但我们也想从 table user中删除name列。确保我们的数据库项目是最新的。username

问题是,如果我们尝试userdetail在预部署中填充表,则该userdetail表不存在。我们可以在其中创建表,pre-deploy但是 db 项目在部署期间尝试再次创建它并失败。如果我们尝试在userdetail部署后填充,则该name列已被删除,我们无法使用它来填充userdetail.

目前我们有两种可能的解决方案,我可以看到。

可能的解决方案 1

name将列保留在user表中,这意味着运行的人口userdetails正常,但我们留下了需要在部署后手动删除的列,这很容易出错。

可能的解决方案 2

创建一个临时表以user在预部署期间捕获信息并将其存储以在部署后脚本期间使用。在部署后删除临时表。

选项 2 目前似乎是最好的,但以后必须以这种方式手动存储和使用数据是一件痛苦的事。有没有推荐的方法来应对这种可能性?

4

1 回答 1

0

我认为你最好的选择是选项#2。运行发布命令时将生成“DROP”语句。这不会考虑任何部署前或部署后脚本,因此在您有机会运行转换脚本之前,该列将被删除。您实际上只能选择在两个不同的构建中执行此操作,或者在部署前创建某种临时表并在部署后删除它。

于 2014-09-15T17:57:39.550 回答