无法迁移db rails,收到错误

时间:2016-02-17 20:29:53

标签: ruby-on-rails ruby-on-rails-3 dbmigrate

我在迁移数据库时遇到错误。错误是:

PG::UndefinedColumn: ERROR:  column roles.deleted_at does not exist
LINE 1: SELECT "roles".* FROM "roles"  WHERE ("roles"."deleted_at" I...
                                              ^
: SELECT "roles".* FROM "roles"  WHERE ("roles"."deleted_at" IS NULL)

这是schema.rb的一部分:

create_table "roles", :force => true do |t|
t.string   "name"
t.string   "title"
t.integer  "resource_id"
t.string   "resource_type"
t.datetime "created_at",    :null => false
t.datetime "updated_at",    :null => false
t.datetime "deleted_at"
end

我试图制作:

rails generate migration AddDeletedAtToRoles deleted_at           

但它没有帮助。

2 个答案:

答案 0 :(得分:1)

如果模式中存在列,但由于找不到迁移失败,则可能处于不一致的数据库状态(即数据库的当前模式与schema.rb不一致,也不能作为迁移进行迁移与您当前的状态不相容)。有很多方法可以进入该状态,但无论如何,最好的办法是清理数据库并再次迁移:

bin/rake db:reset db:migrate

如果这不起作用,则会出现更严重的问题。如果这是一个相当新的应用,bin/rake db:drop db:create db:migrate可能会提供帮助;否则,你需要做一些调试和调查。

答案 1 :(得分:0)

有时我为了摆脱这些不一致的数据库状态而做的是,如果它是一个简单的修复,进入实际的数据库并手动修复任何似乎是问题的东西,以便再次进行迁移。

在您的情况下,您似乎缺少角色表中的deleted_at列。所以你可以做的就是自己创建列。为了在Postgres中做到这一点,你需要做类似的事情:

  1. psql your_database_name 一旦你在那里改变你的roles表并使用以下命令添加你缺少的列。
  2. ALTER TABLE roles ADD COLUMN deleted_at date;
  3. 希望有所帮助。