【Rails】エラー対処法:PG::DuplicateTable: ERROR: relation “テーブル名” already exists

rails-prograshi(プロぐらし)-kv Rails
記事内に広告が含まれていることがあります。

Railsで、rails db:migrateを実行したところ、生成しようとしたテーブルがすでに存在するため、作成できないとのエラーが発生。

この時のエラーの対処法について。

エラー詳細

rails db:migrate

== 20210719082013 CreateClients: migrating ====================================
— create_table(:clients)
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:

PG::DuplicateTable: ERROR: relation “clients” already exists
/rails-vue/db/migrate/20210719082013_create_clients.rb:3:in change' /rails-vue/bin/rails:5:in
/rails-vue/bin/spring:10:in block in <top (required)>' /rails-vue/bin/spring:7:intap’
/rails-vue/bin/spring:7:in `’

Caused by:
ActiveRecord::StatementInvalid: PG::DuplicateTable: ERROR: relation “clients” already exists
/rails-vue/db/migrate/20210719082013_create_clients.rb:3:in change' /rails-vue/bin/rails:5:in
/rails-vue/bin/spring:10:in block in <top (required)>' /rails-vue/bin/spring:7:intap’
/rails-vue/bin/spring:7:in `’

エラー対処法

DBを一旦削除して、再度生成するとマイグレーションできるようになります。

rails db:drop
rails db:create
rails db:migrate


実例

# rails db:drop
Dropped database 'rails_vue_development'
Dropped database 'rails_vue_test'

# rails db:create
Created database 'rails_vue_development'
Created database 'rails_vue_test'

# rails db:migrate
== 20210719082013 CreateClients: migrating ====================================
-- create_table(:clients)
   -> 0.0431s
== 20210719082013 CreateClients: migrated (0.0432s) ===========================


ERROR: database “DB名” is being accessed by other users

rails db:dropを実行しようとした時に次のようなエラーが発生した場合は、

一度、railsをシャットダウンしてから再起動すれば、rails db:drop が実行できるようになります。

※docker exec -itなど、間接的に接続しているものも全てシャットダウン(exit)する。

エラー例

rails db:drop

PG::ObjectInUse: ERROR: database “rails_vue_development” is being accessed by other users
DETAIL: There is 1 other session using the database.
Couldn’t drop database ‘rails_vue_development’
rails aborted!
ActiveRecord::StatementInvalid: PG::ObjectInUse: ERROR: database “rails_vue_development” is being accessed by other users
DETAIL: There is 1 other session using the database.
/rails-vue/bin/rails:5:in <top (required)>' /rails-vue/bin/spring:10:inblock in ‘
/rails-vue/bin/spring:7:in tap' /rails-vue/bin/spring:7:in

タイトルとURLをコピーしました