これなに
カスタムスキーマを作成した際に permission denied for schema
というエラーが出たので、その解消方法をメモ。
ついでに Flutter で Supabase のカスタムスキーマに切り替えた時のおおよその手順もメモ。
実際に遭遇したエラー
my_schema_test
というスキーマを作成して、スキーマ切り替えテストで debugPrint していたらこんな感じのエラーが出てきた。
のちにわかるものですが、権限設定が不足していたようです。
PostgrestException(message: permission denied for schema my_schema_test, code: 42501, details: Unauthorized, hint: null)
参考ガイド
以下の公式ガイドに記載されている通り、権限付与をしてくださいとのことで、これが全てでした。
https://supabase.com/docs/guides/api/using-custom-schemas?queryGroups=language&language=curl
カスタムスキーマ利用の全体の手順
1: スキーマ作成
2: 権限設定
前述の通りスキーマを作成したら権限付与
GRANT USAGE ON SCHEMA my_schema_test TO anon, authenticated, service_role;
GRANT ALL ON ALL TABLES IN SCHEMA my_schema_test TO anon, authenticated, service_role;
GRANT ALL ON ALL ROUTINES IN SCHEMA my_schema_test TO anon, authenticated, service_role;
GRANT ALL ON ALL SEQUENCES IN SCHEMA my_schema_test TO anon, authenticated, service_role;
ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA my_schema_test GRANT ALL ON TABLES TO anon, authenticated, service_role;
ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA my_schema_test GRANT ALL ON ROUTINES TO anon, authenticated, service_role;
ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA my_schema_test GRANT ALL ON SEQUENCES TO anon, authenticated, service_role;
3: コードでスキーマ指定
以下の通りスキーマを指定する。
await Supabase.initialize(
url: dotenv.env['SUPABASE_URL']!,
anonKey: dotenv.env['SUPABASE_ANON_KEY']!,
postgrestOptions: PostgrestClientOptions(schema: 'my_schema_test'), // ここを追記
);
おわりに
日本語の情報は無かったので FlutterFlow とか Stackflow とか Github issue とか漁ってました。
だけど最終的に公式のガイド見つけたのでそれで解決しました、よかったよかった。