PG::DuplicateTable: ERROR:と表示されてしまった時の対処法

マイグレーションをしようとした時に下のようなエラーが表示された。

Mac:$ rake db:migrate
== 20170726082613 CreateGamble: migrating =====================================
-- create_table(:gambles)
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

PG::DuplicateTable: ERROR:  relation "gambles" already exists
: CREATE TABLE "gambles" ("id" serial primary key, "a_team" character varying, "b_team" character varying, "game" timestamp, "event" character varying, "place" character varying, "description" character varying)
〜省略〜
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

このエラーの意味は、もうすでに同じtableがあるんですよと言った感じのエラー。 この状況になったら単純にtableを削除してあげたら問題ない。

ターミナルで下のように入力する。

rails db

その後、#が表示されるので、そこで\dと入力する。

petipeti_development=# \d
               List of relations
 Schema |       Name        |   Type   | Owner
--------+-------------------+----------+-------
 public | gambles           | table    | boku
 public | gambles_id_seq    | sequence | boku
 public | schema_migrations | table    | boku
(3 rows)

今回の場合は、NameがgamblesでTypeがtableのやつを消したいので、下のよう入力する。

petipeti_development=# drop table gambles;

ちゃんとできたかの確認。

petipeti_development=# \d
             List of relations
 Schema |       Name        | Type  | Owner
--------+-------------------+-------+-------
 public | schema_migrations | table | boku
(1 row)

うまくいっていますので、あとは、

rake db:migrate

だけでok

See Also