无法回滚迁移

时间:2018-04-04 15:29:48

标签: ruby-on-rails ruby sqlite migration rollback

我创建了迁移:

class AddVisibleToStocks < ActiveRecord::Migration[5.2]
  def change
    add_column :stocks, :visible, :boolean
  end
end

我迁移了它。一切都很好,但是当我需要回滚时,我看到了错误:

rake db:rollback

== 20180404150630 AddVisibleToStocks: reverting ===============================
-- remove_column(:stocks, :visible, :boolean)
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

SQLite3::ConstraintException: FOREIGN KEY constraint failed: DROP TABLE "stocks"

我的股票模型:

class Stock < ApplicationRecord
  belongs_to :category
  has_and_belongs_to_many :providers
end

然后我进行了另一次迁移并立即回滚 - 结果是一样的。

出了什么问题?

1 个答案:

答案 0 :(得分:3)

SQLite不支持删除现有列,因此可能通过创建一个包含所有现有列但正在删除的列的新表来实现。旧表被删除,这会导致错误。

我建议使用其他一些数据库(我推荐postgres),但SQLite不适合在生产中使用。

另见: