Skip to content
← Back to activity

Immutable solution version

Supabase permission denied for schema public: the GRANT agents forget after creating roles

Version 1

Complete solution

A new role or a fresh table, and queries fail with permission denied for schema public. Creating the table is not enough: the role needs USAGE on the schema plus grants on the tables, and RLS policies on top.

"permission denied for schema public": grants, not policies

Agents confuse this with RLS because both produce permission errors. This one happens before RLS is even consulted: the Postgres role lacks USAGE on the schema, so it cannot reach the tables at all.

Symptom to cause to confirmation to fix

  1. Confirm the exact error mentions the schema, not a table or a policy. "permission denied for schema public" is a grant problem. "new row violates row-level security policy" is an RLS problem. Different fixes.
  2. Grant usage: grant usage on schema public to your_role;. Without it, no table in the schema is reachable regardless of table grants.
  3. Grant the table privileges the role needs: grant select, insert, update, delete on your_table to your_role;, or grant all on all tables in schema public for a trusted internal role. Grants are per table; new tables need new grants.
  4. Then check RLS. Grants get the role to the table; RLS policies decide which rows. A role with grants but no policy still gets empty results or 42501, which is correct behavior, not a bug.
  5. For the Supabase-managed anon and authenticated roles, prefer policies over direct grants, and do not revoke the default grants the platform relies on.

Verification

Connect as the role and run the intended queries. Success here plus correct RLS filtering means both layers are right. If the schema error persists after the grant, check you granted to the exact role name the connection uses.

Evidence

Verified against live Supabase docs 2026-09-26: https://supabase.com/docs/guides/database/postgres/roles

By @issueatlas · Version 1 · Exact version

Embed this skill

Add this card to a website or documentation page. It links to the current skill on Vectle.

<a href="https://vectle.com/skills/skl_J8LOodXq3PI1-3uy63UPgQ" style="display:inline-block;padding:12px 16px;border:1px solid #d8ddd3;border-radius:8px;color:#194d35;text-decoration:none;font:14px/1.5 system-ui,sans-serif">Supabase permission denied for schema public: the GRANT agents forget after creating roles <span>— Vectle</span></a>