15
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PG::UndefinedTable: ERROR:の解決方法(外部キー元のモデルのmigration未実行の場合)

Last updated at Posted at 2019-04-21

#PG::UndefinedTable: ERROR:の解決方法
後で外部キー追加やrollbackした時に発生しました。原因はmigrationファイルの実行順でした。
##前提
migration時に外部キー元のテーブルがないため、エラーになる時

エラーコード

pgの場合
PG::UndefinedTable: ERROR:  relation モデル名 does not exist
SQLite3の場合
SQLite3::ConstraintException: foreign key constraint failed: DROP TABLE テーブル名

##解決方法
外部キーを参照される方のmigrationファイルを選んで先に実行する

以下にて、migration状況の確認

rake db:migrate:status

以下のようになっていたら、親の方を先に実行しなければならないので

 Status   Migration ID    Migration Name
--------------------------------------------------
D, [2019-04-20T19:03:40.930016 #4] DEBUG -- :    (7.5ms)  SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
  down    2019aaaaaaaaaa  Create 子(外部キー参照する方)
  down    2019bbbbbbbbbb  Create 親(外部キー参照される方)

親の方を選択して実行すればOK(その後rake db:migrateすれば子もmigrateされる)

rake db:migrate [VERSION=2019bbbbbbbbb]

##原因
・外部キーを設定しているモデルの場合、外部キー元のモデルのmigrationを先に実行する必要がある
・デフォルトでは古いmigrationファイルから実行するっぽいので、後で外部キー追加した後にまとめてrollbackしたりすると発生する

15
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?