はじめに
Supabase 内の PostgreSQL に対して npx prisma migrate reset
等でデータベースを作成したのち、
@supabase/supabase-js
等でデータアクセスすると permission denied for schema public
のエラーが返却される場合ことあります。
Prisma でスキーマを管理している場合、@supabase/supabase-js
でアクセスすることは本来ありませんが、検証のため実行したところエラーとなったので実行できるように修正する方法をまとめた。
実行する SQL
Supabase のドキュメントには、 public
以外のスキーマを利用する方法が記載されています。
下記ドキュメントには新たに、 myschema
を作成した場合を例に記載されているので myschema
を piblic
に置き換えて実行すれば 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