12

我已经为refinerycms 安装了一个运行良好的博客引擎。

现在我已经生成了一个迁移,其中包含一些表字段更改(当然不是精炼cms 或博客表),但是我收到了一个错误:

== CreateBlogStructure: 迁移 =============================================
- - create_table("refinery_blog_posts", {:id=>true})
注意:CREATE TABLE 将为串行列 "refinery_blog_posts.id" 创建隐式序列 "refinery_blog_posts_id_seq1"
rake 中止!
发生错误,此迁移和所有后续迁移均已取消:

PG::Error: 错误:关系“refinery_blog_posts”已经存在
:CREATE TABLE“refinery_blog_posts”(“id”序列主键,“title”字符变化(255),“body”文本,“draft”布尔值,“published_at”时间戳,“created_at”时间戳不为空,“updated_at”时间戳不为空)

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

4

3 回答 3

16

检查您的 db/schema.rb

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

如果 db/migrate/[timestamp]your_migration 与架构中找到的副本重复并且它应该可以工作,则可以删除它。

于 2013-01-26T20:00:59.913 回答
8
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;
    

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

于 2013-12-09T18:53:17.653 回答
0

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

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

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

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

于 2021-01-30T23:58:33.033 回答