【问题标题】:Adding a null constraint on a unique-indexed column in a migration在迁移中的唯一索引列上添加空约束
【发布时间】:2014-09-26 19:19:32
【问题描述】:

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

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

【问题讨论】:

    标签: sql ruby-on-rails migration


    【解决方案1】:

    理想情况下,在这种情况下,建议创建一个新表,称为 Stage Table (STG_YOUr table_name ),它与原始表非常相似,约束较少。在这里进行所有数据转换/操作,然后一旦准备好合并或插入原始生产表。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        根据我的说法,您应该删除该列并重新创建,如图所示:

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

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

        希望这会有所帮助...

        【讨论】:

          猜你喜欢
          • 2011-03-23
          • 1970-01-01
          • 1970-01-01
          • 2016-01-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-20
          • 2018-06-15
          相关资源
          最近更新 更多