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?

Supabase CLIを使ってリモート( supabase.com )のDBマイグレーションを行う

Posted at

こんにちは。Supabase便利です!

ローカル開発に便利な Supabase Cli ですが、リモートの操作もできるようです。

あまり情報が出てきませんが、DBマイグレーションを行う方法がありました。
そのまとめです。

ログイン

コマンドラインで supabase login をブラウザでSupabaseの認証画面が開き、確認コードが出てきます。そのコードをターミナルに貼り付けると内部的にSupabaseのトークンが、CLI側にセットされます。
これで supabase コマンドでリモート(supabase.com)にアクセスすることができます。

supabase login

Screenshot 2025-01-08 at 14.11.25.png

リンク

リモートのデータベースを修正する場合、ローカルの環境とリモート(supabase.com)のプロジェクトを「リンク」させておく必要があります。

supabase link というコマンドを使うことでローカルの作業ディレクトリとリモートのプロジェクトを紐づける事ができます。
内部的には設定ファイルの config.toml にプロジェクトのIDが書き込まれ、以後作業をする際に該当のプロジェクト宛にコマンドを実行してくれます。
プロジェクトIDのオプションを与えないと対話式でどのプロジェクトに紐づけるか、ログイン済みのアカウントで確認できるプロジェクト一覧から聞かれます。

supabase link



selected project: xxxxxxxxxxxx
Enter your database password (or leave blank to skip):
Connecting to remote database...
Finished supabase link.
WARNING: Local config differs from linked project. Try updating supabase/config.toml
diff supabase/config.toml rxu
--- supabase/config.toml
+++ xxxxxxx
@@ -48,12 +48,11 @@
 enabled = true

.....

local vs linked (「ローカル」と「リンクト」)

主にデータベース関連のコマンドを実行すると、その実行がローカルに向けてか、リンクされたプロジェクトに向けられます。
ローカルに向けるものは local(ローカル)、リンク先のプロジェクトは linked(リンクト)と呼ばれています。

例えば supabase db pull コマンドはデフォルトで linked 向けに実行されます。それぞれのデフォルトの動作はヘルプを見ると書いてあります。

supabase help db pull | grep -e link -e local


      --linked            Pulls from the linked project. (default true)
      --local             Pulls from the local database.

linkedの実行時にパスワードを聞かれる

DB操作をlinkedに向けて行う場合、都度パスワードを聞かれます。
都度都度聞かれるのが面倒な場合、パスワードを保存しておくことができます。

PostgreSQLの場合、 .pgpass ファイルか PGPASSWORD という環境変数に格納しておくことが多いです。

これらのファイルを作成、もしくは環境変数を設定したとしても supabase コマンドには渡りませんので、 -p もしくは --password で与えてやる必要があります。

具体的には下記の様になります。

パスワードファイルを使う場合

パスワードファイルを作成しておきます。

cat > .pgpass

somethingpassword

コマンド実行例

supabase db dump -p $(cat .pgpass)

環境変数を使う場合

環境変数の設定。.bashrc などに指定しておくこともできます。

export PGPASSWORD=somethingpassword

コマンド実行例

supabase db dump -p $(echo $PGPASSWORD)

もちろんですが、管理には十分注意してください。

よく使う動作

基本的には公式ドキュメントを見るのが一番です。

DBをリセットする

デフォルトはローカル。下記はローカルのDBをリセットします。

supabase db reset

linkedは --linked。リセットされるので実行には注意。

supabase db reset --linked

リモートの差分を拾ってくる

pullのデフォルトはlinked

supabase db pull

ダンプ(バックアップ)

デフォルトはlinked

supabase db dump

標準出力に出てしまうのでファイに書き出す場合。ファイル名は dump_日時.sql です。

supabase db dump -p $(cat .pgpass) > dump_'date +%Y%m%d%H%M%S'.sql

上記を圧縮しながら行う例。

supabase db dump -p $(cat .pgpass) | gzip > dump_'date +%Y%m%d%H%M%S'.sql

参考情報

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?