我已经为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运行任务查看完整跟踪)
答案 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 已存在于数据库中。
可能的解决方案:
登录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
看起来很明显但很容易被忽视。要修复只需删除重复的引用。