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

标签 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) 中

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

最佳答案

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

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_info.version = 1 并运行您的迁移,再次。迁移 #1 不会执行,但会直接执行 #2。

关于ruby - 续集迁移错误,关系已经存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19773522/

相关文章:

ruby-on-rails - Ruby:将数据发布到 url

ruby - 增加续集 max_connections 和 pool_timeout 的负面影响是什么?

ruby - 如何将 Sequel 与 PostGIS 一起使用

ruby-on-rails - 如何在使用 Rails 运行的 Sequel 中获取当前数据库对象?

ruby - Rails 3 与 Sequel 集成?

mysql - 面临 NativeException : java. sql.SQLException : Connection com. mysql.jdbc.JDBC4Connection@38054ba0 已关闭

ruby-on-rails - 使用AJAX显示错误消息Ruby on Rails

ruby-on-rails - Ruby - Hash.from_xml 空cdata问题

ruby-on-rails - RSpec/Shoulda : "should be_valid" fails, "contact.should be_valid"通过

ruby-on-rails - Ruby path_to 仅在显式时有效