2014-03-05 79 views
1

這是一個RoR應用程序運行遷移時,我得到的錯誤:紅寶石遷移回滾,但再次運行時出現錯誤的遷移

PG::Error: ERROR: column "bulk_bill" of relation "questionnaires" already exists 

一點背景: 我回滾遷移,這樣我可以更改列的默認設置。 一旦我再次運行遷移,我得到了上述錯誤。

我可以在開發中的postgresql表中看到該列確實存在。我在表格和bulk_bill列中有一個數據,它的默認設置爲false。

什麼是我需要採取的推薦步驟,以便遷移可以成功運行。 我是ruby的初學者,發現ruby文檔仍然有點難以遵循。

def up 
     add_column :questionnaires, :bulk_bill, :boolean, :default => false 
    end 

    def down 
     remove_column :pnp_questionnaires, :bulk_bill 
    end 
+1

你能不能告訴我們這個遷移(向上和向下的方法) – BroiSatse

+0

高清高達 add_column:問卷調查,:bulk_bill,:布爾,:默認=>假 結束 高清下來 remove_column:pnp_questionnaires,:bulk_bill 我到底然後將默認值更改爲零,並嘗試運行 – maggs

+0

@maggs您應該編輯您的問題以描述更多信息,這會更容易閱讀。 –

回答

2

在你up方法要創建在questionaries表列,並在上下方法,則需要從pnp_questionaries刪除。刪除列不會引發除非表不存在,否則您有問題。

最簡單的解決方案:從向上

  1. 註釋掉add_column
  2. 運行遷移(是,運行空遷移)。
  3. 修復您的down方法刪除questionaries表。
  4. 回滾遷移。
  5. 取消註釋up方法。

UPDATE:

我的壞 - 3點是要 '從questionaries刪除列',而不是 '刪除表'。

您需要重新運行創建表的遷移(希望您在此期間不會改變它)。轉到給定的遷移,註釋掉down方法體,然後運行rake db:migrate:redo VERSION=xxxxxxx,其中xxxxxx是此遷移文件名中的時間戳。

+0

PG ::錯誤:錯誤:關係「調查問卷」不存在現在調查問卷表不存在,所以不能添加列。我有一個較早的遷移創建問卷表,所以我認爲這不會重新創建問卷表? – maggs

+0

高清起來 add_column:問卷調查,:bulk_bill,:布爾,:默認=零 結束 >高清下來 drop_table:問卷 結束 – maggs

+0

你怎麼回滾? 'rake db:rollback'它應該只回滾單個遷移。 – BroiSatse