简短版:
down
迁移的内容是什么?在什么情况下你需要使用一个?
长版:
许多支持数据库架构版本的框架(包括但不限于Rails'"迁移")允许开发人员指定如何撤消数据升级(up
操作) (又名down
),甚至通过分析代码自动生成降级操作(如Rails' change
方法)。
事实上,在我遇到的所有Rails迁移代码中这样做似乎非常普遍,这让我想知道它是否被认为是最佳实践。
就个人而言,我从未需要降级数据库架构,我无法想象一个合理的场景,无论是开发还是制作。我的经历似乎与down
迁移的普遍性不一致,所以我猜测我错过了什么......
down
有用的最常见情况是什么?
答案 0 :(得分:4)
这种做法有两个原因:
缺少" down"迁移意味着,我们根本没有迁移,我们又回到了90年代初期。从备份恢复数据库或痛苦地修改相信的表,一切都应该顺利。
答案 1 :(得分:2)
假设您已将新版本推向生产并运行迁移,一段时间后您会发现无法立即解决的错误。由于您需要使生产服务器保持运行,因此您将恢复为先前的提交。但是,这不会还原对数据库所做的更改,这会导致错误。因此,您需要一种方法来回滚对数据库所做的更改,然后还原为旧版本。这种情况可能不会经常发生,但是具备该机制的时机非常重要。
在开发过程中,您可能会运行一些迁移,然后决定要更改,添加或删除某些内容。有办法撤消它们意味着您不需要为每一个小变化创建新的迁移。
答案 2 :(得分:-1)
因此,基本上Rails可以在创建像
这样的迁移时检测逆操作add_column => remove_column
create_table => drop_table
但对于某种类型的迁移,您无法真正使用更改来降级数据库模式,例如,如果要更改小数列的精度,则无法猜测原始精度回滚?所以你需要在这种情况下定义down方法。