Rails数据库迁移错误:关系已存在

kib*_*ekr 6 rake ruby-on-rails dbmigrate ruby-on-rails-3

我尝试迁移数据库时收到错误.我不完全记得我是怎么来到这里的,但我相信我:

  1. 创建了新的分支,搭建了"请求",db:迁移,切换回master,以及合并分支
  2. 创建了另一个分支,做了一些东西,db:迁移,一切都运行正常.
  3. 从heroku postgres数据库中提取,这样我就可以测试一下事情是否适用于实际数据.然后尝试db迁移,但给了我这个错误:

    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) 
    
    Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Woa*_*dae 5

我不确定您使用的拉取策略到底是什么,但是如果我们对您的拉取策略做出两个合理的假设:

  1. 它不会删除数据库而只是覆盖表,因为这需要较少的权限。
  2. 它以一种“归档模式”运行,这意味着它不会仅仅因为源上不存在表而删除目标上的表。想想 rsync;您必须指定--delete以获得该实用程序的预期行为。

如果您的步骤是正确的,那么发生的情况是您覆盖了schema_migrations表格,因此 Rails 认为您还没有添加表格,但是由于上面的 #2,您的 heroku pull 也没有删除表格。

不要创建另一个迁移!!!这将在除您之外的其他人的计算机上失败,但只会在您的计算机上运行一次。

相反,运行rails dbconsole并执行类似的东西DROP TABLE 'requests'(我忘记了 postgres 语法,可能不完全是那样)。然后你可以运行你的迁移。