2

我刚刚为我的 ruby​​ 项目创建了一个新的迁移文件(例如 003_foo3.rb)
,我使用的是 sequel 3.48。
先在本地测试

$sequel -m ~/myproject/db/migration postgres://postgres@localhost/myproject_db
错误:Sequel::DatabaseError: PG::Error: ERROR: 关系“银行”已经存在

该“银行”表已经在第一个迁移文件中(001_foo1.rb)

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

4

1 回答 1

1

我感觉到你的痛苦,因为我时不时地从 Sequel 收到类似的错误消息。

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

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

使用时间戳整数版本

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

鉴于您提供的信息,无法说出究竟发生了什么。

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

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

假设您有以下迁移:

001_some_migration.rb
002_some_other_migration.rb

...并且您已经运行 001,并且您收到“已经存在”错误,然后您可以设置schema_info. version= 1 并再次运行您的迁移。迁移#1 不会执行,但会直接执行#2。

于 2013-11-10T23:19:44.830 回答