2017-05-18 26 views
1

我一直在想如何在迁移文件中编写down函数。理想情况下,它应该与我们在up方法中所做的完全相反。现在假设我编写了up函数来删除列上的unique约束,向表中添加了一些新行(具有重复数据),现在我想回滚迁移。理想情况下,我会编写down方法在列上再次添加唯一约束,但迁移不会回滚,因为表中现在包含重复数据。 所以我的问题是 -如何在迁移文件中写入函数(knex.js)

  • 在这种情况下该怎么办?
  • 如何在迁移中编写down函数?
  • 在这种情况下,我可以保留down功能吗?

谢谢。

+0

你不应该在'up'上插入数据。插入数据与“播种”有关。 –

+0

@FazalRasel他从来没有说过添加行是迁移文件的一部分,有时候这样做是完全正确的。种子文件通常用于重复性任务和迁移只运行一次的任务。 –

+0

@FazalRasel是的,正如Mikael所说的,我没有在'up'上插入任何数据 –

回答

1

我通常不写下功能,只是把它们留空。

我从来没有回滚迁移,如果我想要更早的数据库状态,我只是从备份中恢复整个数据库。

如果我只是想放回唯一的约束,我会写另一个向上迁移,它修复重复的行,然后添加唯一的约束。

我知道很多人在测试之间使用回滚来重置数据库,但这样做的确很慢。

+0

正如你所说,你会写另一个迁移_fixes duplicates_。你将如何解决迁移中的重复问题?如果我对以前的数据执行过“软删除”操作,并希望将其保存在数据库中并添加一个唯一约束? –

+0

@HarshalGangurde你可以选择最适合你的方法。您可以创建部分唯一索引,而不是完全唯一的索引,它只是忽略软删除的行(我们为我们的归档行执行此操作)。其他方法是将软删除的数据移动到其他表中,或以约束不失败的方式更改软删除行中的数据。没有正确的答案,取决于应用。 –

相关问题