2013-11-04 73 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将被直接执行。

相关问题