こんにちは。Supabase便利です!
ローカル開発に便利な Supabase Cli ですが、リモートの操作もできるようです。
あまり情報が出てきませんが、DBマイグレーションを行う方法がありました。
そのまとめです。
ログイン
コマンドラインで supabase login
をブラウザでSupabaseの認証画面が開き、確認コードが出てきます。そのコードをターミナルに貼り付けると内部的にSupabaseのトークンが、CLI側にセットされます。
これで supabase
コマンドでリモート(supabase.com)にアクセスすることができます。
supabase login
リンク
リモートのデータベースを修正する場合、ローカルの環境とリモート(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
参考情報