2017-05-18 50 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你可以選擇最適合你的方法。您可以創建部分唯一索引,而不是完全唯一的索引,它只是忽略軟刪除的行(我們爲我們的歸檔行執行此操作)。其他方法是將軟刪除的數據移動到其他表中,或以約束不失敗的方式更改軟刪除行中的數據。沒有正確的答案,取決於應用。 –

相關問題