在迁移中的唯一索引列上添加空约束

时间:2014-09-26 19:19:33

标签: sql ruby-on-rails migration

我正在尝试向我的db(key)添加一个既是唯一又不为null的列。在我的迁移中,我有填充列的代码。问题是迁移失败了,因为它在添加数据之前添加了这个唯一/非空约束,然后抱怨存在现有密钥。

这是我需要两次迁移的地方 - 一次是添加列/数据,还是后一种添加约束?或者这可以一次完成吗?

3 个答案:

答案 0 :(得分:0)

理想情况下,在这种情况下,建议创建一个名为Stage Table(STG_YOUr table_name)的新表,该表与具有较少约束的原始表非常相似。在此完成所有数据转换/操作,然后准备好MERGE或插入到原始生产表中。

答案 1 :(得分:0)

我不建议在迁移中填充数据。我发现最好让迁移只关注对数据库结构的物理更改。您应该创建rake任务来操纵数据。实际上,您应该将数据操作方法放在模型中(并对其进行单元测试),并让您的rake任务委托给这些方法。然后,您可以在运行所有迁移之后运行rake任务,或者混合单个迁移和rake任务。

答案 2 :(得分:0)

最新答案,但我希望这对其他人有帮助!

根据我的说法,您应该删除该列,然后再次显示,如下所示:

alter table students drop column email;
alter table students add column email varchar (80) unique not null; 

电子邮件是唯一的列,但为空,因此我删除了它,然后通过所需的属性将其重新添加到表中。

希望这对您有帮助...