狐好きぷろぐらまー

狐好きプログラマーのブログです。

【Supabase CLI】ローカルとリモートの両方を変更し、Supabase CLIの`supabase db pull`が失敗した時に行った対応内容【supabase migration repair】

こんにちは。 pregum_foxです。 また技術書典などのイベントが近づいているので、目当ての本を探しつつ最近の楽しみにしています。

今回はSupabase CLIを使って、ローカル環境をリモートからpullしようとsupabase db pull コマンドを叩いた時にエラーが出た時の対処法について記載していきます。

問題概要

開発で使用しているローカル環境のSupabaseプロジェクトのDBを変更した後、リモート環境で別の変更を加えた後にsupabase db pullを叩いた時にエラーが出ました。

エラー画面

原因

ローカル環境とリモート環境のマイグレーションの同期が取れていないことが原因でした。

対応内容

上記の問題を解消するために対応内容について記載します。

前提条件

まずは前提として以下の項目を満たしていることを確認します。

  • [x] Dockerが起動していること
    • Dockerが起動していないとsupabase コマンドが動作しませんでした
  • [x] supabase login コマンドでログインできていること
  • [x] supabase linkコマンドでpullしたい対象のプロジェクトへリンクできていること
  • [x] supabase statusコマンドでローカル環境のSupabaseプロジェクトの情報が表示されること
    • こちらはもしかすると不要かもです

エラー内容と対処法

  1. マイグレーションの状態確認
    supabase migration listコマンドでマイグレーションファイルの状態を確認しました。

片方のみに反映されているマイグレーションファイルは見当たらなかったので、もう少し調べました。

その結果、リモート側の変更がローカルにすでにその変更が含まれているためにエラーが出ていることがわかりました。(スクショ時にはすでにマイグレーションファイルを削除した後だったので、後付けしております)

  1. ローカル側の変更を削除
    ローカルとリモートの差異を解消するため、ローカル環境にある不要なマイグレーションファイルを削除しました。

    例として、20240917140424_~マイグレーションファイルを削除しました。

マイグレーションファイルを削除

この時点でsupabase migration list を叩くと以下のようにローカル環境の欄が空になっていることが確認できます。

  1. リモートを適用前にマーク
    削除後、supabase migration repair --status reverted <マイグレーション日付>コマンドを使って、リモートの最新マイグレーションを適用前にマークしました。

ここでは、supabase migration repiar --status reverted 20240917140424 というコマンドを叩きました。

このコマンドにより、supabase migration listの結果からも該当マイグレーションが消えることが確認できました。

  1. リモートデータを再取得
    上記の設定後にsupabase db pullを再実行し、リモートデータの取得が正常に完了しました。

この際、「remote_schema」マイグレーションファイルを保存するかどうか尋ねられるため、保存する選択を行いました。

上記で保存しなくともリモート環境には保存されている為、特別な理由がない限りは保存する選択をおすすめします。

リモート環境のマイグレーション履歴はSupabaseのDatabase > PLATFORM > Migrations から確認できます。

リモート環境のマイグレーション履歴の参照場所

上記で無事リモート環境とローカル環境のマイグレーションが同期され、supabase db pullが動作するようになりました。 お疲れ様でした。

雑感

開発時はGUIでぽちぽちできるのですごい楽なのですが、いざローカル環境を整えて開発しようとするとよくDB関連の問題に遭遇し、その度に時間を浪費することがあったので、頻発するdb pullについてのエラー対処法を備忘録として残しました。 他にもマイグレーション方法などローカル環境で作成したfunctionをリモート環境へpushする方法など記事をそのうちまとめたいなと考えています。 ここまで読んでいただきありがとうございました。

参考サイト

https://supabase.com/docs/reference/cli/supabase-migration-repair