はじめに
Project cannot be restored through the dashboard
Supabaseの無料プランでは、プロジェクトが一時停止後、90日間が経過すると、管理画面上からの復元ができなくなります。
今回は、90日の復元期限を過ぎたプロジェクトを復元する必要があり、その際に行った対応手順を記録としてまとめました。
対応手順
1. Supabase側の対応
1-1. 復帰用の新規プロジェクト作成
Supabaseの管理画面から新規プロジェクトを作成します。
1-2. バックアップファイルを保存
事前にSupabaseから取得しておいた .backup
ファイルを使用します。
.backup
ファイルは、Supabaseで復元対象のプロジェクトを開くと表示される「Download backups > Database backup」からダウンロード可能です。
1-3. DockerでPostgreSQLコンテナの作成・起動
ローカル環境にPostgreSQLをインストールしていないかつ、ローカルに直インストールしたくなかったので、psql実行用にDockerを作成します。
Dockerコンテナを作成したコマンド
docker run --rm -it --name pg_restore -v ${PWD}:/backup postgres:15 bash
1-4. psql
コマンドでSupabaseのDBをローカルから復元
事前にSupabaseから取得しておいた .backup
ファイルから使用します。
成功したコマンド
以下のコマンド(Supabaseにて作成した新規プロジェクトのTransaction poolerに記載あり)を使用して、Docker環境内で復元を実施しました。
Docker環境のターミナルで実行したpsqlコマンド
psql -h aws-0-ap-southeast-1.pooler.supabase.com -p 5432 -d postgres -U <ユーザー名> -f /backup/db_cluster-MM-DD-YYYY@xx-xx-xx.backup
失敗したコマンドとエラー内容
以下のホストを指定したコマンド(Supabaseにて作成した新規プロジェクトのDirect connectionに記載あり)は、IPv6の関係で失敗しました。
psql -h <ホスト名> -p 5432 -U postgres -d postgres -f /backup/db_cluster-MM-DD-YYYY@xx-xx-xx.backup
エラー内容
psql: error: connection to server at "<ホスト名>"......
Is the server running on that host and accepting TCP/IP connections?
2. フロントエンド側の対応
.env ファイルの以下の値を、新しいSupabaseプロジェクトのものに書き換えます。
NEXT_PUBLIC_SUPABASE_URL=<復帰用の新規プロジェクトのURL>
NEXT_PUBLIC_SUPABASE_ANON_KEY=<復帰用の新規プロジェクトのキー>
3. Netlify側の対応
Netlifyを使ってデプロイしていたため、管理画面から環境変数を修正します。
- Site configuration にアクセス
- 「Environment variables」を表示
- 以下の設定値を更新
NEXT_PUBLIC_SUPABASE_URL=<復帰用の新規プロジェクトのURL>
NEXT_PUBLIC_SUPABASE_ANON_KEY=<復帰用の新規プロジェクトのキー>
おわりに
今回は、Supabaseのバックアップ保持期限が過ぎた後の復元方法を記録しました。
手元に .backup ファイルさえあれば、新プロジェクト+psql実行環境(今回はDockerコンテナ)で復旧可能です。
同じ状況で困っている方の参考になれば幸いです。