【发布时间】:2012-11-18 09:53:01
【问题描述】:
我在尝试迁移数据库时遇到错误。我不完全记得我是如何来到这里的,但我相信我:
- 创建新分支,搭建“Requests”脚手架,db:migrated,切换回 master,合并分支
- 创建了另一个分支,做了一些事情,db:migrated,一切正常。
-
从 heroku postgres 数据库中提取,因此我可以测试是否使用实际数据。然后尝试数据库迁移,但给了我这个错误:
rake db:migrate == CreateRequests: migrating ================================================= -- create_table(:requests) NOTICE: CREATE TABLE will create implicit sequence "requests_id_seq1" for serial column "requests.id" rake aborted! An error has occurred, this and all later migrations canceled: PG::Error: ERROR: relation "requests" already exists : CREATE TABLE "requests" ("id" serial primary key, "title" character varying(255), "content" text, "category" character varying(255), "status" character varying(255), "requested_track_id" integer, "created_at" timestamp, "updated_at" timestamp)
有什么想法吗?
【问题讨论】:
-
关于创建隐式序列的消息不是错误,只是一个通知(信息性消息。对于任何使用自动递增列的表来说,这是正常的,活动记录默认情况下会为
id列。错误是requests表已经存在。 -
那么如果我收到该消息该怎么办?我通过创建迁移来删除表来解决它,然后重新创建迁移来创建同一个表。有没有更好的办法?
-
假设环境相同,您的数据库架构将是所有分支的最终结果。在合并分支之前,您的代码不需要显示在底层数据库上实际发生的一系列迁移。而且,当您运行迁移时,将仅针对当前迁移进行对先前迁移的检查,这将表明潜在的冲突。我建议将所有迁移保存在一个分支中。
标签: ruby-on-rails ruby-on-rails-3 rake dbmigrate