1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめてのアドベントカレンダーAdvent Calendar 2024

Day 13

エラーPG::UndefinedTable: ERROR: relation "xxxx" does not exist (PG::UndefinedTable)

Posted at

エラー詳細

GitHubでMerge後、renderにて自動デプロイ失敗

deproy logs
Caused by:
PG::UndefinedTable: ERROR:  relation "xxxx(テーブル名)" does not exist (PG::UndefinedTable)
 (省略)
 ==> Build failed

ローカルでは問題なく動いてた。
"xxxx"テーブル関係が存在しないとのことなので心当たりを探っていく

原因

色々試したけど、結果マイグレーションファイルのup順が原因でした。

ターミナル
  % rails db:migrate:status

マイグレーションのステータスを確認

ターミナル
database: APP_development

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20241113021323  Devise create users
   up     20241119002039  Create vvvv
   up     20241119011527  Create wwww
   up     20241129062819  Create yyyy
   up     20241205063125  Create xxxx

このYYYYテーブルにxxxxの外部キー書いてたから起きたエラーでした。
順番通り読まれてYが「Xが見当たらないよ!」ってことかな。



20241129062819_create_YYYY.rb
class Createyyyy < ActiveRecord::Migration[7.0]
  def change
    create_table :yyyy do |t|
      t.string     :phone, null: false
      t.references :xxxx,  null: false, foreign_key: true
      t.timestamps
    end
  end
end

原因がわかったのでマイグレーションファイルの順番を変えて行きます。

対処法

1.マイグレーション一覧を確認

ターミナル
 % rails db:migrate:status


 database: APP_development

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20241113021323  Devise create users
   up     20241119002039  Create vvvv
   up     20241119011527  Create wwww
   up     20241129062819  Create yyyy
   up     20241205063125  Create xxxx

2.yyyyテーブルを削除する

yyyyテーブルを削除するためにStatusをdownする。

ターミナル
rails db:migrate:down VERSION = Migration ID

再度ステータスを確認してdownになってたら削除コマンド

その前に!

順番だけ変えたいのであって中身は変えないのでファイルの内容コピーしてメモに貼っておきます!

ターミナル/削除コマンド
% rm -rf db/migrate/削除したいファイル名 (今回なら20241129062819_create_yyyy)

ステータス確認してテーブルが消えていればOK

3.yyyyテーブルを作り直す

ターミナル
%rails g migration create_yyyy

でマイグレーションファイルを作りなおして、メモにコピーしていた前述の内容を貼り付け、
Statusをupにすれば出来上がりです

Statusをupにする
%rails db:migrate

念のためここでもステータスを確認。 これで無事デプロイできました!

余談

マイグレーションファイルの順番で関係あるんですね...
多分ファイル作る時気付けるかもしれないんだけど、
今回の外部キー制約は抜け漏れてて、一度rollbackして足したから
作る時点で気づけなかったんだろうなぁ。

初心者なんで、もっとこうしたほうが〜とかあったらぜひ教えていただきたいです。
よろしくお願いします。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?