PostgreSQLprismaSupabase

Supabase 内の PostgreSQL を Prisma で reset した後に実行する SQL

はじめに

Supabase 内の PostgreSQL に対して npx prisma migrate reset 等でデータベースを作成したのち、 @supabase/supabase-js 等でデータアクセスすると permission denied for schema public のエラーが返却される場合ことあります。

Prisma でスキーマを管理している場合、@supabase/supabase-jsでアクセスすることは本来ありませんが、検証のため実行したところエラーとなったので実行できるように修正する方法をまとめた。

実行する SQL

Supabase のドキュメントには、 public 以外のスキーマを利用する方法が記載されています。

下記ドキュメントには新たに、 myschema を作成した場合を例に記載されているので myschemapiblic に置き換えて実行すれば OK です。

Using Custom Schemas | Supabase Docs

GRANT USAGE ON SCHEMA "public" TO anon, authenticated, service_role;
GRANT ALL ON ALL TABLES IN SCHEMA "public TO anon, authenticated, service_role;
GRANT ALL ON ALL ROUTINES IN SCHEMA "public TO anon, authenticated, service_role;
GRANT ALL ON ALL SEQUENCES IN SCHEMA "public TO anon, authenticated, service_role;
ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA "public" GRANT ALL ON TABLES TO anon, authenticated, service_role;
ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA "public" GRANT ALL ON ROUTINES TO anon, authenticated, service_role;
ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA "public" GRANT ALL ON SEQUENCES TO anon, authenticated, service_role;

手っ取り早く実行したいなら以下2SQLだけでも可能です。

GRANT USAGE ON SCHEMA "public" TO authenticated, anon, service_role;
GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA "public" TO authenticated, anon, service_role;

Ref