Hitsuji_monのブログ~ 村上春樹のあれ ~

文学好きな組み込み系エンジニア

Postgresqlでmigrationができない | Pendingされる時

PostgreSQLRailsアプリを作成中に
「migrationエラー」が起きる問題

f:id:Hitsuji_mon:20191013212344p:plain


原因: すでにデータベースが作成されているのに、新たに同じデータベースを作成しようとすると起きる

結論:PostgreSQLを再起動して、migrationすれば解決

$ bin/rake db:reset
$ bin/rake db:migrate:reset 

これでmigrationできる

teratail.com


migrationエラーの内容

# DBのDROP, CREATE, migrate を自動で実行するコマンド
$ rails db:migrate:reset RAILS_ENV=development
PG::DuplicateTable: ERROR:  relation "comments" already exists
$ rails dp:drop
PG::ObjectInUse: ERROR:  database "app2ch_development" is being accessed by other users
  • PostgreSQLを一度切断し、再度起動しないといけない
# データベースにログイン
$ psql DB名
# 起動中のプロセスを特定する
デーアベース名 = # select * from pg_stat_activity;

プロセス指定して、一個一個切るのはめんどいな

$ brew services stop postgresql # DB終了
$ brew services start postgresql # DB起動


PosgreSQLで強制的にデータベースを削除する方法

psql -l //データベース名を確認
psql postgres //postgreSQLにログイン
\du //ユーザーと権限を確認

ps aux | grep 消したいDB名 // 消したいDB名のプロセスID(数字)を確認
sudo kill プロセスID
//以下例
sudo kill 45912
# postgresqlだとエラーだったので、以下は権限ユーザに書き換え
dropdb -U postgres(もしくは消す権限のもったユーザー) 消したいDB名

PostgreSQLでデータベースを作成する方法

# Ownerも指定
$ createdb MyApp_development -O MyApp
$ createdb MyApp_test -O MyApp

qiita.com