2013-11-04 76 views
2

我剛剛爲我的ruby項目創建了一個新的遷移文件(例如003_foo3.rb)
我使用續集3.48。
測試在本地第一續集遷移錯誤,關係已經存在?

 
$sequel -m ~/myproject/db/migration postgres://[email protected]/myproject_db 
Error: Sequel::DatabaseError: PG::Error: ERROR: relation "bank" already exists 

該「銀行」表已在第一遷移文件(001_foo1.rb)

我想續集跟蹤已運行遷移? 我錯過了什麼?

+0

您可以提供遷移文件嗎?該關係是否已在之前的遷移步驟中定義?你在使用模型嗎?對於您的問題:是的,續集會檢查哪些遷移步驟已經完成,但無法檢查之前步驟中完成的操作。 – knut

回答

0

我感覺到你的痛苦,因爲我在這裏和之後收到了來自Sequel的類似錯誤消息。

續集在您的應用程序數據庫中創建一個名爲schema_info的表,以跟蹤您運行的遷移。

create_table(:schema_info) do 
    column :version, "int(11)", :default=>0, :null=>false 
end 

要麼使用timestampsinteger versions

您的錯誤消息可能是由於Sequel未創建該表或因爲您從頭創建了應用程序數據庫,在這種情況下架構版本已丟失,從而創建錯誤消息。

根據您提供的信息,無法確定發生了什麼。

我偶爾會遇到類似的錯誤,我將遷移文件中的所有遷移代碼註釋掉,運行遷移,然後再次取消註釋代碼。

如果您確定您已經運行了某種遷移,則可以在schema_info表中更改version字段的值。

假設你有以下遷移:

001_some_migration.rb 
002_some_other_migration.rb 

...你已經跑了001,你會得到一個「已存在」的錯誤,那麼你可以設置schema_infoversion = 1並再次運行您的遷移。遷移#1不會被執行,但是#2將被直接執行。

相關問題