Using Custom Schemas
By default, your database has a public
schema which is automatically exposed on data APIs.
Creating custom schemas
You can create your own custom schema/s by running the following SQL, substituting myschema
with the name you want to use for your schema:
_10CREATE SCHEMA myschema;
Exposing custom schemas
You can expose custom database schemas - to do so you need to follow these steps:
- Go to API settings and add your custom schema to "Exposed schemas".
- Run the following SQL, substituting
myschema
with your schema name:
_10GRANT USAGE ON SCHEMA myschema TO anon, authenticated, service_role;_10GRANT ALL ON ALL TABLES IN SCHEMA myschema TO anon, authenticated, service_role;_10GRANT ALL ON ALL ROUTINES IN SCHEMA myschema TO anon, authenticated, service_role;_10GRANT ALL ON ALL SEQUENCES IN SCHEMA myschema TO anon, authenticated, service_role;_10ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA myschema GRANT ALL ON TABLES TO anon, authenticated, service_role;_10ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA myschema GRANT ALL ON ROUTINES TO anon, authenticated, service_role;_10ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA myschema GRANT ALL ON SEQUENCES TO anon, authenticated, service_role;
Now you can access these schemas from data APIs:
_10// Initialize the JS client_10import { createClient } from '@supabase/supabase-js'_10const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY, { db: { schema: 'myschema' } })_10_10// Make a request_10const { data: todos, error } = await supabase.from('todos').select('*')_10_10// You can also change the target schema on a per-query basis_10const { data: todos, error } = await supabase.schema('myschema').from('todos').select('*')