rake迁移期间已存在关系

时间:2012-09-26 12:55:00

标签: rake refinerycms migrate

我已经为refinerycms安装了一个博客引擎,它正常运行。

现在我已经生成了一些表字段更改的迁移(当然不是refinerycms或博客表),但是我收到了错误:

  

== CreateBlogStructure:迁移========================================== ==
   - create_table(“refinery_blog_posts”,{:id => true})
  注意:CREATE TABLE将为串行列“refinery_blog_posts.id”创建隐式序列“refinery_blog_posts_id_seq1”
  耙子流产!
  发生错误,此操作和所有后​​续迁移都已取消:

     

PG ::错误:错误:关系“refinery_blog_posts”已经存在   :CREATE TABLE“refinery_blog_posts”(“id”串行主键,“标题”字符变化(255),“body”文本,“draft”布尔值,“published_at”时间戳,“created_at”时间戳NOT NULL,“updated_at”时间戳NOT NULL)

     

任务:TOP => DB:迁移
  (通过使用--trace运行任务查看完整跟踪)

3 个答案:

答案 0 :(得分:13)

检查db / schema.rb

除了db / migrate / [timestamp]中的迁移之外,你很可能在那里创建了相同的表your_migration

你可以删除db / migrate / [timestamp] your_migration,如果它与模式中找到的一样重复,它应该可以工作。

答案 1 :(得分:7)

PG::Error: ERROR: relation “refinery_blog_posts” already exists

Pg是一个Rails gem,它允许Rails和PostgreSQL之间的通信。它将您的迁移与SQL表联系起来,从而产生关系错误。所以,错误的含义是:

  

我正在尝试基于迁移X创建表X,但是表X   已存在于数据库中。

可能的解决方案:

  1. 创建删除那些可能是旧表的迁移。
  2. 更改迁移的名称。
  3. 登录PostgreSQL并删除表格。类似的东西:

    $ psql -U username databasename
    

    然后

    database_name=# drop table table-name;
    

    但确切的命令可能会有所不同。

答案 2 :(得分:0)

添加,因为这是一个明显但容易被忽视的错误原因(这是搜索引擎提出的第一个帖子)。

如果您不小心在同一次迁移中两次定义了相同的关系,则会出现此错误。

def change
  create_table :books do |t|
    t.belongs_to :author
    t.belongs_to :author # Duplicated column definition
  end
end

看起来很明显但很容易被忽视。要修复只需删除重复的引用。