簡體   English   中英

我的Rails模式更改會清除掉數據嗎?

[英]Will my Rails schema changes wipe out data?

我懷疑這是一個奇怪的問題。 我將在下面立即說明問題,然后為感興趣的人提供解釋我如何到達這里的背景

問題:

由於遷移,我的架構處於這樣的狀態,它將我標記為已刪除並添加了相同的列。 換句話說,我在比較schema.rb時得到了這個:

-    t.integer  "cut_id"
-    t.datetime "created_at",  :null => false
-    t.datetime "updated_at",  :null => false
-    t.integer  "animal_id"
+    t.datetime "created_at",                     :null => false
+    t.datetime "updated_at",                     :null => false
+    t.integer  "animal_id"
+    t.integer  "cut_id"

令人擔心的是,盡管這不會凈增/刪除列,但如果我將此代碼推送到生產環境並運行遷移,則即使它沒有刪除凈額中的任何列,它也將清除現有數據。

是這樣嗎 有誰知道數據庫是從字面上刪除然后添加四列,還是意識到沒有更改? 如果它將刪除它們,誰能想到解決此問題的方法,並保存數據以在刪除之前重新插入? 我不介意在刪除數據與替換數據之間存在時間間隔。

我如何在這里:

基本上,我在本地進行了很多更改,涉及許多遷移,然后才意識到我已經擦除了一些列,因為我很匆忙,而且是個白痴,因此我需要將所有想要遷移的數據遷移到新表中。

幸運的是,這只是本地的。 不幸的是,我只是做了一個git reset HEAD ^來扔掉我的工作,但是即使遷移消失了,該架構仍處於頑固的遷移后狀態,無法重置或進行任何其他操作。 因此,我經歷了整個過程,嘗試恢復舊的遷移並成功地將其回滾一半,然后編寫其他遷移以完全回滾我半回滾的更改。

巨大的混亂,僅僅是這個問題的結果。 畢竟這不是問題,我可以輕松部署/睡眠嗎?

因此,這里有兩個不同的問題-遷移和架構。 如果運行刪除列的遷移,那么列以及包含的所有數據也會被刪除。 因此,您可能想要編輯遷移並刪除或編輯任何刪除要保留的列的遷移。 請務必非常小心,任何遷移都不會刪除要保留的數據。

schema.rb本質上與生產數據庫無關,除非您使用rake任務(rake db:schema:load)顯式加載架構。 那會抹掉您的數據,但通常來說,這不是您要對生產系統執行的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM