I love Supabase but our team needs to use schema functionality that PostgreSQL offers - unfortunately we have been unsuccessfully to make schemas working so far.
Other info:
What we have tried:
We created a new schema and added access to all types of authentication (why all? We first thought that maybe there is an error with authentication):
CREATE SCHEMA Brano;
GRANT USAGE ON SCHEMA Brano TO postgres, anon, authenticated, service_role, dashboard_user;
Exposed schema to the API via this setting:
Tried the following code:
var options = {
schema: 'brano'
}
const supabaseUrl = 'supabaseUrl'
const supabaseKey = 'supabaseKey'
const supabaseClient = createClient(supabaseUrl, supabaseKey, options);
const { data, error } = await supabaseClient
.from('test_brano')
.insert([{
data: 123
}]);
Got this error:
{
"message":"permission denied for table test_brano",
"code":"42501",
"details":null,
"hint":null
}
Links and documentation that we have tried reading (unfortunately we didn't make it work either way):
Did we missed something? Thanks in advance!
In addition to the first two steps you did:
Granting usage:
CREATE SCHEMA Brano;
GRANT USAGE
ON SCHEMA Brano
TO postgres, anon, authenticated, service_role, dashboard_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA brano
GRANT ALL ON TABLES TO postgres, anon, authenticated, service_role, dashboard_user;
Exposing the schema in the Settings:
There's a third step that was missing:
Granting actions to be able to insert/select data:
GRANT SELECT, INSERT, UPDATE, DELETE
ON ALL TABLES IN SCHEMA brano
TO postgres, authenticated, service_role, dashboard_user, anon;
GRANT USAGE, SELECT
ON ALL SEQUENCES IN SCHEMA brano
TO postgres, authenticated, service_role, dashboard_user, anon;
You must set these grants again for every new table created in the custom schema.
Then you can call it as in your example:
const options = {
db: { schema: 'brano' }
};
const supabase = createClient(supabaseUrl, SUPABASE_KEY, options)
const d = new Date(2018, 11, 24, 10, 33, 30, 0);
const { data, error } = await supabase
.from('test_brano')
.insert([
{ data: 3, created_at: d }
])
console.log(data)
if (error) {
console.log("error getting results");
throw error;
}
const options = {
schema: 'brano'
}
const supabase = createClient(supabaseUrl, SUPABASE_KEY, options)
const d = new Date(2018, 11, 24, 10, 33, 30, 0);
const { data, error } = await supabase
.from('test_brano')
.insert([
{ data: 3, created_at: d }
])
console.log(data)
if (error) {
console.log("error getting results");
throw error;
}