无法迁移数据库 rails,出现错误
Can't migrate db rails, getting an error
我在迁移数据库时遇到错误。错误是:
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
但这并没有帮助。
如果您的模式中存在列,但由于未找到而导致迁移失败,则您可能处于不一致的数据库状态(即,您的数据库的当前模式与 schema.rb 不一致,您也不能迁移,因为迁移与您当前的状态不兼容)。进入该状态的方法有很多,但无论如何,最好的办法是清除数据库并再次迁移:
bin/rake db:reset db:migrate
如果这不起作用,则说明您有更严重的问题。如果这是一个相当新的应用程序,bin/rake db:drop db:create db:migrate
可能会有所帮助;否则,您需要进行一些调试和调查。
有时我为了摆脱这些不一致的数据库状态而做的是,如果这是一个简单的修复,进入实际的数据库并手动修复任何看起来有问题的地方,以便让迁移再次进行。
在您的情况下,您似乎缺少角色 table 中的 deleted_at
列。所以你可以做的是自己创建列。为了在 Postgres 中做到这一点,你需要做类似的事情:
psql your_database_name
一旦你在那里改变你的 roles
table 并使用以下命令添加你缺少的列。
ALTER TABLE roles ADD COLUMN deleted_at date;
希望对您有所帮助。
我在迁移数据库时遇到错误。错误是:
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
但这并没有帮助。
如果您的模式中存在列,但由于未找到而导致迁移失败,则您可能处于不一致的数据库状态(即,您的数据库的当前模式与 schema.rb 不一致,您也不能迁移,因为迁移与您当前的状态不兼容)。进入该状态的方法有很多,但无论如何,最好的办法是清除数据库并再次迁移:
bin/rake db:reset db:migrate
如果这不起作用,则说明您有更严重的问题。如果这是一个相当新的应用程序,bin/rake db:drop db:create db:migrate
可能会有所帮助;否则,您需要进行一些调试和调查。
有时我为了摆脱这些不一致的数据库状态而做的是,如果这是一个简单的修复,进入实际的数据库并手动修复任何看起来有问题的地方,以便让迁移再次进行。
在您的情况下,您似乎缺少角色 table 中的 deleted_at
列。所以你可以做的是自己创建列。为了在 Postgres 中做到这一点,你需要做类似的事情:
psql your_database_name
一旦你在那里改变你的roles
table 并使用以下命令添加你缺少的列。ALTER TABLE roles ADD COLUMN deleted_at date;
希望对您有所帮助。