12

完全に機能しているrefinerycmsにブログエンジンをインストールしました。

今、いくつかのテーブル フィールドを変更して移行を生成しました (もちろん、refinerycms や blog テーブルではありません) が、エラーが発生します:

== 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" シリアル主キー、"title" 文字が可変 (255)、"本文" テキスト、"ドラフト" ブール値、"published_at" タイムスタンプ、「created_at」タイムスタンプ NOT NULL、「updated_at」タイムスタンプ NOT NULL)

タスク: 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 に答える