我刚刚为我的 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) 中
我认为续集跟踪已经运行的迁移? 我错过了什么?
最佳答案
我感受到了你的痛苦,因为我时不时地从 Sequel 收到类似的错误消息。
Sequel 在您的应用程序数据库中创建一个名为 schema_info
的表来跟踪您运行的迁移。
create_table(:schema_info) do
column :version, "int(11)", :default=>0, :null=>false
end
要么使用timestamps或 integer versions .
您的错误消息可能是由于 Sequel 没有创建该表,或者因为您从头开始重新创建了应用程序数据库,在这种情况下模式版本已经丢失,因此产生了您的错误消息。
根据您提供的信息,无法说出到底发生了什么。
我偶尔会遇到类似的错误,我把迁移文件中的所有迁移代码都注释掉,运行迁移,然后再次取消注释代码。
如果您确定您已经运行了某个迁移,您可以更改 schema_info
表中的 version
字段的值。
假设您有以下迁移:
001_some_migration.rb
002_some_other_migration.rb
...并且您已经运行了 001,并且出现“已存在”错误,然后您可以设置 schema_info
.version
= 1 并运行您的迁移,再次。迁移 #1 不会执行,但会直接执行 #2。
关于ruby - 续集迁移错误,关系已经存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19773522/