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

问题描述 投票:0回答:3

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

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

sql ruby-on-rails migration
3个回答
0
投票

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


0
投票

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


0
投票

迟到的答案,但我希望这对其他人有帮助,如果不是那个问这个问题的人!

据我说,您应该删除该列并再次进行,如下所示:

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

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

希望这有助于......

© www.soinside.com 2019 - 2024. All rights reserved.