【发布时间】:2014-09-26 19:19:32
【问题描述】:
我正在尝试向我的数据库 (key) 添加一个既唯一且不为空的列。在我的迁移中,我有填充该列的代码。问题是迁移失败,因为它在添加数据之前添加了这个唯一/非空约束,然后抱怨存在现有键。
这是我需要两次迁移的地方吗?一次添加列/数据,然后一次添加约束?还是可以一次性完成?
【问题讨论】:
标签: sql ruby-on-rails migration
我正在尝试向我的数据库 (key) 添加一个既唯一且不为空的列。在我的迁移中,我有填充该列的代码。问题是迁移失败,因为它在添加数据之前添加了这个唯一/非空约束,然后抱怨存在现有键。
这是我需要两次迁移的地方吗?一次添加列/数据,然后一次添加约束?还是可以一次性完成?
【问题讨论】:
标签: sql ruby-on-rails migration
理想情况下,在这种情况下,建议创建一个新表,称为 Stage Table (STG_YOUr table_name ),它与原始表非常相似,约束较少。在这里进行所有数据转换/操作,然后一旦准备好合并或插入原始生产表。
【讨论】:
我不建议在迁移中填充数据。我发现最好让迁移只关注数据库结构的物理变化。您应该创建 rake 任务来操作您的数据。确实,您应该将数据操作方法放入模型中(并对它们进行单元测试),并将您的 rake 任务委托给这些方法。然后,您可以在运行所有迁移后运行您的 rake 任务,或者混合单个迁移和 rake 任务。
【讨论】:
迟到的答案,但如果不是提出问题的人,我希望这对其他人有所帮助!
根据我的说法,您应该删除该列并重新创建,如图所示:
alter table students drop column email;
alter table students add column email varchar (80) unique not null;
这里的电子邮件是唯一但为空的列,因此我将其删除,然后通过所需的属性将其重新添加到表中。
希望这会有所帮助...
【讨论】: