续集迁移错误,关系已经存在?

时间:2013-11-04 17:30:45

标签: ruby sequel

我刚刚为我的ruby项目创建了一个新的迁移文件(例如003_foo3.rb)
我用续集3.48。
先在当地进行测试

$sequel -m ~/myproject/db/migration postgres://postgres@localhost/myproject_db
Error: Sequel::DatabaseError: PG::Error: ERROR:  relation "bank" already exists

'bank'表已经在第一个迁移文件(001_foo1.rb)

我认为续集跟踪已经运行的迁移? 我错过了什么?

1 个答案:

答案 0 :(得分:1)

我感觉到你的痛苦,因为我在这里得到了来自Sequel的类似错误信息。

Sequel在您的应用数据库中创建一个名为schema_info的表,以跟踪您运行的迁移。

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

使用timestampsinteger versions

您的错误消息可能是由于Sequel没有创建该表,或者是因为您从头开始重新创建了应用程序数据库,在这种情况下,架构版本已丢失,从而产生了错误消息。

根据你提供的信息,不可能说出究竟发生了什么。

我偶尔会遇到类似的错误,我会在迁移文件中注释掉所有迁移代码,运行迁移,然后再次取消注释代码。

如果您确定自己已经运行了某个迁移,则可以更改version表中schema_info字段的值。

假设您有以下迁移:

001_some_migration.rb
002_some_other_migration.rb

...并且您已经运行了001,并且出现“已存在”错误,然后您可以设置schema_infoversion = 1并再次运行迁移。迁移#1不会被执行,但#2将直接执行。