Just do IT

学びのアウトプットメモ

rails db:migrate をすると出るPG::DuplicateColumn: ERROR の対処

起きたエラー

テーブルをいじっていていろいろミスったので、git reset --hardをして再度rails db:migrateコマンドを打つと、次のエラーが出た。

PG::DuplicateColumn: ERROR:  column "user_id" of relation "pages" already exists

「pagesテーブルにuser_idカラムを加えようとしてるけど、もうすでに存在してるよ〜」という意味。同じ名前のカラムを同一のテーブルに2つ以上作れません。

原因

以下、エラーが起きるまでにやったこと。

「え、git resetしたら戻してくれるんじゃないの?」と思ったが、そうではないみたい。

つまり、pagesテーブルにはuser_idがすでに存在しているのにも関わらず、マイグレーションを実行しようとして起きたエラーだった。

対処

データベースやスキーマファイルを一度削除し、すべてのマイグレーションを実行する。

bin/rails db:migrate:reset

ただし、これだと初期データも失われるのため、それまで使用していたログインユーザーの情報も消える。

再度db:fixtures:loadをする必要があるかもしれないが、その場合は二度手間になる。

コマンド一発でやりたかったので、rails db:resetをした。

bin/rails db:reset

これは、データベースの削除・再作成、初期データの登録まですべてやってくれる。

コマンドでいうと次のとおり。