Supabase: リモートのデータベースのマイグレーションをリセットする

Supabase: リモートのデータベースのマイグレーションをリセットする

December 21, 2022

ローカルの Supabase のマイグレーションをリセットするのは簡単で supabase db reset を実行するだけです。

一方で実際に稼働しているリモートのデータベースのマイグレーションをリセットするコマンドは用意されていません。

手作業でリセットする #

以下作業をすることでリセットできます。

  1. Supabase ダッシュボードの Database を開く。
  2. public スキーマのテーブルを全て削除する。
  3. schema_migrations スキーマの schema_migrations を削除する。

ローカルのターミナルで以下を実行する。

supabase link --project-ref ****[project id]****
supabase db push

ただしテーブル数が多いと1つずつ削除するのは手間がかかります。その場合、次の手順を使うと簡単です。

SQL を実行してリセットする #

Supabase ダッシュボードの SQL Editor から以下を実行する。

DROP SCHEMA IF EXISTS public CASCADE;
CREATE SCHEMA public;

GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO anon;
GRANT ALL ON SCHEMA public TO authenticated;
GRANT ALL ON SCHEMA public TO service_role;

DROP SCHEMA IF EXISTS supabase_migrations CASCADE;

ローカルのターミナルで以下を実行する。

supabase link --project-ref ****[project id]****
supabase db push

Supabase ダッシュボードの SQL Editor から以下を実行する。

GRANT ALL ON ALL TABLES IN SCHEMA public TO postgres;
GRANT ALL ON ALL TABLES IN SCHEMA public TO anon;
GRANT ALL ON ALL TABLES IN SCHEMA public TO authenticated;
GRANT ALL ON ALL TABLES IN SCHEMA public TO service_role;

こちらのやりかたならテーブル数が多くなっても作業の手数は変わりませんので楽できるかもしれないですね。

補足 #

おまけで、SQL Editor からたまに実行するクエリを載せておきます。

public スキーマのテーブル一覧を表示

SELECT *
FROM information_schema.tables
WHERE table_schema = 'public';

public スキーマのテーブルへの権限付与状況を表示

SELECT grantor, grantee, table_schema, table_name, privilege_type
FROM information_schema.table_privileges
WHERE table_schema = 'public';