我想设置一种跟踪数据库架构更改的机制,例如这个答案

  

对于您所做的每一项更改   数据库,你写了一个新的迁移。   迁移通常有两种方法:   “向上”改变的方法   应用“向下”和“向下”方法   哪些更改已撤消。单身   命令使数据库达到   日期,也可以用来带   数据库到特定版本   架构。

我的问题如下:每个DDL命令都在“up”中吗?方法可逆吗?换句话说,我们是否可以始终提供“向下”状态。方法?您能想象任何无法“向下”编辑的DDL命令吗?

请不要考虑“up”期间的典型数据迁移问题。我们丢失数据的方法:例如将字段类型从 datetime DateOfBirth )更改为 int YearOfBirth )我们正在丢失无法生成的数据恢复。

有帮助吗?

解决方案

在sql server中我知道的每个DDL命令都是一个向上/向下对。

其他提示

除了数据丢失之外,我所做过的每次迁移都是可逆的。也就是说,Rails提供了一种将迁移标记为“破坏性”的方法:

  

有些转变具有破坏性   以一种无法逆转的方式。   这种迁移应该提高   一个ActiveRecord :: IrreversibleMigration   他们的down方法中有例外。

请参阅API文档此处

是的,您已经确定了丢失数据的情况,无论是通过转换还是简单地在“向上”中丢弃数据。迁移。

另一个例子是你可以删除一个SEQUENCE对象,从而失去它的状态。 “向下”迁移将重新创建序列,但它将从1开始。这可能导致序列生成重复值。如果您在空数据库上执行迁移并且希望序列从1开始,但是如果您有一些数据行,则您希望序列重置为最大值,这不是问题目前正在使用中,除非您对该表有独占锁定,否则难以可靠地执行。

任何其他依赖于数据库中数据状态的DDL都存在类似问题。这可能不是一个好的架构设计,我只是想想任何适合你问题的案例。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top