👻

Supabaseローカル環境へ手動で作成中のマイグレーションファイルを反映させる手順

に公開

未完成のマイグレーションファイルをお試しでローカル環境に適用したいときの手順。supabase cli経由だと特定のマイグレーションファイルのみ実行ができなかったので書いた。

結論

下記手順で進めるとスムーズ

  1. supabase db dump --local --data-only --file $BACKUP_FILE コマンドでデータのみのバックアップを取得
  2. supabase studio(ローカル環境)の SQL Editor でマイグレーションを実行
  3. supabase db reset で初期化
  4. 1で取得したバックアップを復元し、元の状態に戻す
  5. マイグレーションファイルが完成するまで2-4を繰り返す
  6. 完成したら2-4で元の状態に戻し、 supabase migration up でマイグレーションを適用

バックアップの取得

最終的に元の状態に戻したいので下記コマンドでバックアップを取得

supabase db dump --local --data-only --file $BACKUP_FILE

--data-only フラグでデータのみのバックアップにすること。じゃないと supabase db reset で初期化したときに実行されたマイグレーションと競合して復元できなくなるので注意

マイグレーションを手動で実行

supabase studio(ローカル環境)にブラウザでアクセス。urlは supabase status で確認できます。(私の環境だと http://127.0.0.1:54323 に割り当てられていました)

SQL Editor を開き、作成したマイグレーションをコピペして実行。

supabase migration up でも実行できるが、こっちでやるとマイグレーション履歴に取り込まれてしまうのでやり直しが面倒になる(直接履歴テーブルにアクセスして手動修正など)

初期化

supabase db reset で初期化。このとき、 supabase/migrations ディレクトリに作成途中のマイグレーションファイルがあると実行されてしまうので、忘れずに移動させておく

バックアップの復元

取得しておいたバックアップをSQL Editorにコピペして実行。これでマイグレーション実行前に戻る

マイグレーションの適用

マイグレーションの手動実行 -> 初期化 -> マイグレーションの手動実行 ... を繰り返し、マイグレーションファイルが完成したら正式な手順で適用させる(じゃないと履歴にのらず、リモートへの反映が手間)

マイグレーションファイルを supabase/migrations/ に移動し、 supabase migration up で適用

後はCI/CD経由でリモート環境に反映させてもいいし、 supabase db push を手動実行してもいいし、お好きな方法で反映させて終了

終わりに

supabase cli入れれば supabase start だけでローカル開発環境整うのでおすすめです!

Discussion