Supabase errors, explained and fixed
162 articles on the errors and questions that come up when you build on Supabase. Written for SupaHost, and true for open-source Supabase in general.
Popular42501 permission deniedJWT expiredDatabase error saving new userEdge Function 401Storage RLS 403Not receiving emails
Database
Postgres errors, permissions, performance and connections.
38 articles- "permission denied for table" (42501) errorsFix Postgres error 42501 on SupaHost. Covers missing table and sequence grants, RLS write rejections, read-only MCP tokens and tables owned by Supabase service roles.
- 42P01: relation does not existWhy Postgres says a table doesn't exist when you can see it, and how to fix it on SupaHost. Covers the wrong database, search_path, schema-qualified names and mixed-case names.
- ALTER TABLE takes forever on a large tableWhy ALTER TABLE hangs or locks your app on large tables, which changes rewrite the whole table, and safe patterns using lock_timeout, NOT VALID constraints and concurrent indexes.
- camelCase table or column names not workingPostgres folds unquoted names to lower case, so a table called mealPlans or a column called createdAt breaks in SQL. Quote them, or rename them to snake_case safely.
- Canceling statement due to statement timeoutWhat the 57014 statement timeout error means, how to check the timeouts set on your project's roles, and how to fix slow queries or raise the limit safely on SupaHost.
- Common Prisma errors with SupabaseFixes for P1001, P1000, P1003, shadow database P3014, prepared statement errors and baselining when using Prisma with a Supabase project on SupaHost over the SSH tunnel.
- Connection refused or timeout when connecting to PostgresWhy psql, ORMs and pg_dump get ECONNREFUSED or time out against SupaHost, and how to connect through the Business SSH tunnel at 127.0.0.1:5432 instead.
- Database size not shrinking after deleting dataDeleted rows leave space Postgres reuses but doesn't give back. How SupaHost measures database size, how to find bloat, and when to use VACUUM FULL, TRUNCATE or a table rewrite.
- Databases I created manually don't show upA database made with CREATE DATABASE isn't a SupaHost project, so it has no API, Auth, Storage or dashboard entry. Why, and what to do instead: a new project, or a schema.
- duplicate key value violates unique constraint after importing dataAfter a CSV or SQL import, inserts fail with a duplicate key on the primary key. Reset the id sequence to the table's highest value, for one table or the whole schema.
- Faster vector search with an HNSW indexVector similarity queries that scan every row slow down as data grows. Add an HNSW index with pgvector, make sure queries use it, tune recall, and build it within your memory.
- FATAL: password authentication failedFix "password authentication failed for user postgres" when connecting to SupaHost Postgres through the SSH tunnel. Covers wrong passwords, pooler user names and a local Postgres on port 5432.
- Finding queries blocked by locksFind which session is blocking your queries with pg_stat_activity and pg_blocking_pids, end it safely, and stop it happening again with lock_timeout and idle transaction timeouts.
- Freezing writes during a migrationPause writes to one project while you migrate or move data, and keep reads working. A Data API pre-request check, Storage policies, paused cron jobs, and how to undo it all.
- High CPU usage on your instanceFind what's using CPU on a SupaHost instance with pg_stat_activity, pg_stat_statements and supahost-status, then fix slow queries, sign-in bursts and heavy Realtime, or resize the VM.
- High memory or swap usageWhat uses memory on a SupaHost instance (Postgres connections, big sorts, Studio, Edge Functions), how to check it with SQL and supahost-status, and how to bring it down.
- How to delete a Postgres roleFix "role cannot be dropped because some objects depend on it". How to reassign or drop a role's objects and privileges in every database first, and which roles never to drop.
- How to revoke execute on a Postgres functionRevoking execute from anon alone doesn't stop a function being called through the Data API. How Postgres and Supabase grant EXECUTE by default, and how to lock a function down.
- Implementing soft deletesMark rows as deleted instead of removing them, without RLS errors. A deleted_at column, a filtered view, an RPC to delete, partial indexes, and a cron job to purge old rows.
- index row size exceeds btree maximumWhy Postgres refuses to index long text values with "index row size exceeds btree version 4 maximum 2704", and the hash, expression and trigram indexes to use instead.
- infinite recursion detected in policy for relationFix RLS error 42P17 when a policy queries its own table or two tables' policies query each other. Move the lookup into a security definer function in a schema the API doesn't expose.
- insufficient privilege on pg_stat_statementsWhy pg_stat_statements shows "<insufficient privilege>" instead of query text, how to check what your role can see, and how to find slow queries for one SupaHost project.
- invalid byte sequence for encoding UTF8: 0x00Postgres text can't hold the NUL character (0x00) or bytes that aren't valid UTF-8. Where the error comes from in imports and API inserts, and how to clean the data.
- NEW is null in a trigger functionWhy NEW (or a field of it) is null inside a Postgres trigger. Covers statement-level triggers, DELETE triggers, wrong return values and missing user metadata in sign-up triggers.
- no pg_hba.conf entry for hostWhat "no pg_hba.conf entry for host" means, why SupaHost's own Postgres shouldn't return it, and how to find the server that does (often a local Postgres or your previous host).
- Partial migrations from transaction mistakesA migration failed halfway and left some tables changed and others not. Why it happens, how to see what was applied, how to finish or undo it, and how to make migrations all-or-nothing.
- Partitioning an existing tablePostgres can't turn an existing table into a partitioned one in place. How to create a partitioned copy, move the data, swap names, and keep RLS, the API and Realtime working.
- pg_dump fails with "query would be affected by row-level security policy"Why pg_dump stops on tables with RLS when the dumping role can't bypass it, what --enable-row-security really does, and the simplest way to get a full dump of a SupaHost project.
- prepared statement "s0" already existsWhy ORMs hit "prepared statement already exists" behind PgBouncer or Supavisor, why SupaHost's direct connections normally avoid it, and the cases where it still happens.
- RLS performance best practicesSlow queries with Row Level Security are usually fixable. Wrap auth.uid() in a select, index policy columns, name the role, avoid per-row joins, and measure as the real API role.
- Row Level Security, simplifiedA plain explanation of Row Level Security in Supabase projects - what a policy is, using vs with check, which role your request runs as, and four policies that cover most apps.
- Running EXPLAIN ANALYZE on functionsEXPLAIN ANALYZE on a function call hides the queries inside it. How to see the real plans of plpgsql and SQL functions on SupaHost, with PREPARE and auto_explain.
- security definer functions and RLS: what to exposeA security definer function runs with its owner's rights and skips RLS. How to write one safely, keep it out of the Data API, and still call it from RLS policies.
- Speeding up slow queries with indexesFind slow queries, read EXPLAIN ANALYZE, and add the right B-tree, composite or partial index without locking your table. Worked example with a bookings app on SupaHost.
- Timezones and wrong local time in PostgresTimes off by a few hours usually come from timestamp without time zone, or converting twice. How to store times as timestamptz, convert for display, and group by a user's local day.
- Too many connections / remaining connection slots are reservedFix "sorry, too many clients already" and "remaining connection slots are reserved" on SupaHost, where 400 connections are shared by every project on the instance.
- Using SQLAlchemy with Supabase PostgresConnect SQLAlchemy and Alembic to a SupaHost project over the Business SSH tunnel, size the pool for a shared server, and keep migrations out of the Supabase schemas.
- Why are there gaps in my id sequence?Postgres sequences skip numbers after rollbacks, failed inserts, upserts and restores. Why that's by design, and how to build gapless numbers (like invoice numbers) when you need them.
Data API
PostgREST errors, schema cache, empty results and 4xx/5xx responses.
12 articles- 520 and 5xx errors from the REST APIWhat 500, 502, 503, 504 and Cloudflare 520 errors from the Data API mean on SupaHost, how to tell a database error from a gateway error, and what to check for each.
- column does not exist when using or() filtersFix "column does not exist" and "failed to parse logic tree" errors from supabase-js or() filters, caused by embedded tables, unquoted values and wrong column names.
- High latency with the Supabase clientFind where slow supabase-js requests spend their time (network distance, the query, RLS, or extra round trips) and the fixes that help most on a SupaHost project.
- HTTP status codes from the Supabase APIsA reference of the HTTP status codes the SupaHost gateway, the Data API (PostgREST), Storage and Edge Functions return, what each one means and where to look first.
- Operations too complex for the client libraryWhen a query builder chain can't express what you need (transactions, multi-table writes, aggregates, locking), put the logic in a Postgres function and call it with supabase.rpc().
- PGRST002: Could not query the database for the schema cacheWhat the PGRST002 503 error from the Data API means, the usual causes (database unavailable, connections exhausted, locks) and how to check each one on SupaHost.
- PGRST106: The schema must be one of the followingWhy the Data API rejects requests for a custom schema with PGRST106 "Invalid schema", and how to reach that data on SupaHost through views or functions in public.
- PGRST303: JWT issued at futureWhy the Data API rejects a token with "JWT issued at future", how PostgREST checks the iat claim with 30 seconds of tolerance, and how to find the token's real source.
- PostgREST not seeing new tables, columns or functions (schema cache)Fix "Could not find the table in the schema cache" and similar errors after a schema change by reloading PostgREST's schema cache on your SupaHost project.
- select returns an empty array but the table has dataWhy supabase.from().select() returns [] with no error when rows exist, usually Row Level Security or a missing session, and how to test the query as the right role.
- service_role client still gets RLS errorsWhy a supabase-js client created with the service_role key can still hit row-level security, usually because a user session replaced the key, and how to build a clean admin client.
- Supabase API call hangs or never returnsWhy an await on a supabase-js call can hang forever, from auth callback deadlocks to locked rows and a busy connection pool, and how to find which one you have.
Auth
Sign-in errors, emails, OAuth redirects, OTPs, JWTs and sessions.
24 articles- 401 invalid claim: missing sub claimgetUser() fails with "invalid claim, missing sub claim" because the token it checked is the anon key, not a user's access token. How to spot it in servers and Edge Functions.
- Admin tasks on the server with the service_role keyCreate, invite, ban and delete users from your server or an Edge Function with the service_role key. How to set up an admin client safely and check that the caller is allowed.
- Auth error 500: Database error querying schemaSign-in fails with a 500 "Database error querying schema". Usually NULL token columns from users inserted with SQL, or changed privileges in the auth schema. How to check and fix both.
- auth.role() and auth.email() are deprecated in policiesOlder policies use auth.role() = 'authenticated' and auth.email(). How to find them in your database and rewrite them with a TO clause and auth.jwt().
- Can auth cookies be HttpOnly?Not with the standard @supabase/ssr setup, because browser code needs the session. When an HttpOnly, server-only setup makes sense, what it costs, and better ways to reduce XSS risk.
- Database error saving new userSign-ups fail with "Database error saving new user". It is almost always a trigger on auth.users failing. How to find the broken trigger in Studio and fix it.
- Email template changes not showing upYou edited an Auth email on SupaHost but users still get the old text. Check that it was saved, that it's the template Auth actually sends, and which placeholders work.
- Errors creating, updating or deleting usersFix "Database error creating new user", "Database error deleting user" and similar errors in Studio's Auth users page or the admin API. Usually a trigger or a foreign key.
- Google sign-in fails for some usersGoogle sign-in works for you but not for others. Usually the consent screen is in Testing or Internal mode, users are in an in-app browser, the callback URL changed, or a sign-up trigger fails.
- Invalid TOTP code enteredMFA verification fails with "Invalid TOTP code entered". Causes include clock drift, a stale authenticator entry or the wrong factor id, plus how an admin can reset a user's factor.
- JWT expiredRequests fail with "JWT expired" because the user's access token outlived its lifetime and wasn't refreshed. Why refresh gets skipped and how to fix it in browsers, mobile apps and servers.
- Migrating from auth-helpers to @supabase/ssrReplace @supabase/auth-helpers-nextjs with @supabase/ssr. A mapping of old helpers to new clients, the cookie code you need, and what changes for sessions on SupaHost.
- Moving Auth users between projectsCopy Auth users from one project to another and keep their ids and passwords. Choose between import, branching, an SSH tunnel dump, or a SQL copy that works on every plan.
- Not receiving Auth emailsConfirmation, magic link or password reset emails don't arrive. A checklist to find out whether Auth sent the email, and what blocks it on the way, including rate limits and spam filters.
- OAuth sign-in not redirecting on the serversignInWithOAuth in a server action or route does nothing, or the user comes back signed out. On the server you must redirect to data.url yourself and exchange the code in a callback route.
- OTP or magic link "token has expired" / otp_expiredEmail links fail with otp_expired or "Email link is invalid or has expired". Often an email scanner used the link first. How to make sign-in links reliable, with the one-time code fallback.
- PKCE errors: code verifier, cannot parse responseFix PKCE sign-in errors such as "code verifier not found", "both auth code and code verifier should be non-empty", flow_state_not_found and responses the client can't parse.
- Redirected to the wrong URL after sign-in (redirectTo)After OAuth or an email link, users land on localhost:3000 or your Site URL instead of the redirectTo page. How the Redirect URLs allow list and wildcards work on SupaHost.
- Rotating API keys and the JWT secretSupaHost projects use legacy anon and service_role keys, and key or JWT secret rotation isn't available in the dashboard. What that means, and what to do if a service_role key leaks.
- Security of anonymous sign-insAnonymous users get the authenticated role, so ordinary policies apply to them too. How to tell them apart in RLS, limit abuse, clean up old anonymous users and upgrade them to real accounts.
- Sending Auth emails in the user's languageSupaHost has one template per Auth email type, with no per-language versions. Three workarounds: bilingual text, localized landing pages, or sending your own sign-in emails with generateLink.
- Session missing in fetch requests to your APIThe browser is signed in, but your own API route or backend sees no user. Send the session in cookies or as a Bearer token, and build a per-request client on the server.
- Should I shorten cookie Max-Age?Usually no. Max-Age only controls how long the browser keeps the session cookie, not how long tokens are valid. When a shorter Max-Age is useful, and how to set it with @supabase/ssr.
- Troubleshooting Supabase Auth in Next.jsFix the common Next.js App Router auth problems with SupaHost. Server components that see no user, sign-outs after an hour, cookie errors, and email links that don't sign users in.
Storage
Upload errors, policies, caching and file limits.
8 articles- Cleaning up failed or partial uploadsHow to avoid and clean up files left behind when an upload or the database write around it fails, with an upload pattern, SQL to find orphans and a cleanup script.
- Files not caching (cache-control)How Storage sets the cache-control header, why browsers re-download files or keep showing old versions, and how to cache well on SupaHost, where files come straight from your instance.
- Folder operations and hierarchical policies in StorageStorage folders are path prefixes, not real directories. How to list, move and delete a whole folder with supabase-js, and how to write policies based on folder names.
- Private files still accessible after logoutWhy a private Storage file can still open after a user signs out (signed URLs, access tokens that haven't expired, browser cache) and how to shorten each window.
- Storage 403: new row violates row-level security policy on uploadWhy a Storage upload fails with 403 "new row violates row-level security policy", and the storage.objects policies you need for uploads, upserts and per-user folders.
- Unexpectedly high storage usageHow SupaHost measures file storage, why usage can be higher than you expect (branches, originals, leftovers, other projects), and SQL to find which buckets and files use the space.
- Upload file size limitsSupaHost Storage accepts files up to 50 MB each. What the 413 "Payload too large" error looks like, how bucket limits interact with it, and options for larger files.
- Why can't I upload to or list my public bucket?A public bucket only makes files readable by URL. Uploads, listing, moves and deletes still go through RLS on storage.objects, so they need policies like any private bucket.
Realtime
Channels, disconnects, missing messages and Postgres Changes.
9 articles- Broadcasting from the databaseSend Realtime Broadcast messages straight from Postgres with realtime.send and realtime.broadcast_changes, using triggers and private channels instead of Postgres Changes.
- Debugging Realtime with logs and DevToolsHow to debug Supabase Realtime on SupaHost from the client side: subscribe errors, the client logger, and reading WebSocket frames in browser DevTools, since there is no Realtime log viewer yet.
- must be owner of table messagesA migration that touches realtime.messages fails with 42501 must be owner of table messages. Why it happens, which statement to remove, and how to add Realtime policies safely.
- Postgres Changes not firingYour postgres_changes listener never receives inserts, updates or deletes. Check the supabase_realtime publication, RLS select policies, the session token and your filter syntax.
- Realtime messages not arrivingYour channel subscribes but Broadcast or Presence messages never show up. A checklist of the usual causes, from topic and event mismatches to private channels and self-send.
- Realtime TIMED_OUT and CHANNEL_ERRORWhat the TIMED_OUT and CHANNEL_ERROR subscribe statuses mean, how to read the error reason, and how to fix token, private channel, network and rate limit causes.
- Silent disconnects when the app is in the backgroundRealtime stops delivering messages after a browser tab or mobile app sits in the background. Why timers get throttled, and how to use a Web Worker heartbeat, reconnect and refetch.
- TooManyChannels errorA Realtime join fails because one client has too many open channels. Why channels leak in React and other frameworks, and how to clean them up and reuse them. Limit is 100 per client on SupaHost.
- Understanding Realtime heartbeatsWhat the heartbeat messages in a Realtime WebSocket are, how often they're sent, what happens when one is missed, and how to watch connection health from your code.
Edge Functions
Deploy failures, error responses, timeouts and imports.
14 articles- Copying Edge Functions between projectsHow to copy Edge Functions from one SupaHost project to another, or from Supabase Cloud, using the dashboard editor or an AI agent over MCP, plus the secrets and settings to redo.
- CORS error calling an Edge FunctionFix "blocked by CORS policy" when calling a SupaHost Edge Function from the browser: answer OPTIONS preflights, add headers to every response, and spot router errors hiding behind CORS.
- Edge Function deploy failedA SupaHost Edge Function deploy ends in the error status. What the build check does, why it fails (entry file, imports, size limits), and how the previous version keeps serving.
- Edge Function memory limit or worker limit errorsFix 546 WORKER_RESOURCE_LIMIT errors from SupaHost Edge Functions. Each worker has 150 MB of memory; learn to find what uses it and how to stream and batch instead.
- Edge Function returns 401Fix 401 Unauthorized from a SupaHost Edge Function: UNAUTHORIZED_NO_AUTH_HEADER and UNAUTHORIZED_INVALID_JWT, the Require JWT toggle, webhooks and calls from cron or pg_net.
- Edge Function returns 404Fix 404 responses from SupaHost Edge Functions: NOT_FOUND from the router, a wrong URL or slug, a function that never deployed, or a 404 returned by your own routing code.
- Edge Function returns 500Find and fix 500 errors from SupaHost Edge Functions. WORKER_ERROR means an uncaught exception; learn to read the Logs card, catch errors and return useful responses.
- Edge Function returns 503 or 504Fix 503 BOOT_ERROR (the function couldn't start) and 504 IDLE_TIMEOUT (no response within 150 seconds) from SupaHost Edge Functions, with the usual causes for each.
- Edge Function takes too long or times outWhy a SupaHost Edge Function times out, what the 150-second response limit means, and patterns for long work: timeouts on calls, batching, queues and scheduled functions.
- Import errors with esm.sh or npm packagesFix module-not-found, bare specifier and esm.sh errors in SupaHost Edge Functions. Use npm: and jsr: specifiers, pin versions, and know which packages can't run in Deno.
- Inspecting function environment variablesWhich environment variables SupaHost Edge Functions get, how to confirm a secret is set without revealing it, and why there is no SUPABASE_DB_URL.
- Static outbound IP for Edge FunctionsOutbound requests from SupaHost Edge Functions leave from your instance's own IP address, which stays the same while the instance exists. How to find it and use it in allowlists.
- supabase functions deploy doesn't work with SupaHostThe Supabase CLI can't deploy Edge Functions to SupaHost. Why, and the two ways that work: the dashboard's Functions tab and an AI agent using the SupaHost MCP server.
- WebSockets in Edge FunctionsCan a SupaHost Edge Function serve WebSockets? The runtime supports Deno.upgradeWebSocket, but worker limits apply, so test before relying on it. Realtime is usually the better fit.
Cron & Queues
Jobs that don't run, history, and queue processing.
6 articles- Cleaning up cron run historyHow pg_cron run history is kept on SupaHost, why you can't delete from cron.job_run_details, and how to keep a longer history of your own if you need one.
- Cron job not runningA pg_cron job that never runs, runs at the wrong time or fails silently. How to check cron.job and cron.job_run_details, and the usual causes on SupaHost.
- Debugging database webhooks and pg_netDatabase webhooks or net.http_post calls that never reach your endpoint. How to read net._http_response, find timeouts and 401s, and test requests on SupaHost.
- ERROR: can only create extension in database postgres (pg_cron)Why create extension pg_cron fails in a SupaHost project, why you don't need it, and how to keep migrations that enable pg_cron working both locally and on SupaHost.
- Queue messages reappearing (visibility timeout)Why pgmq messages come back after you read them, how the visibility timeout and read_ct work, and how to delete, archive or extend messages so each one is handled once.
- Stopping cron jobs on a restored project or branchAfter a restore, a project's cron jobs keep running against the restored database. Branches start with no jobs. How to pause, review and recreate jobs safely.
Platform
Instances, billing, domains, backups, usage and account access.
20 articles- A restore didn't bring back Storage filesSupaHost restores roll back a project's database but not its Storage files. Why deleted files stay gone, what "Object not found" after a restore means, and how to protect files.
- Are all Supabase features available on SupaHost?Most Supabase features work on SupaHost as they do on Supabase Cloud. A quick list of what works, what works differently, and what isn't available, with links to details.
- Can't create more than 3 projects during the trialSupaHost's 7-day free trial allows up to 3 projects, and branches count toward it. How to activate your plan early to get your full project allowance.
- Changing an instance's regionA SupaHost instance's region can't be changed after it's created. How to move projects to a new instance in another region, and what to recreate afterwards.
- Connecting directly to Postgres (psql, pg_dump, ORMs)How to connect psql, pg_dump, Prisma, Drizzle or a GUI straight to a SupaHost project's Postgres over the SSH tunnel on Business, and what to use on other plans.
- Custom domain behind Cloudflare proxyWhy a SupaHost custom domain needs Cloudflare's "DNS only" setting, what the "proxied by Cloudflare" message means, and how to set the record up correctly.
- Custom domain stuck verifyingA SupaHost custom domain stuck on "Waiting for DNS", "Issuing certificate" or "Needs attention". What each state means and how to fix the DNS record.
- Egress on SupaHost explainedWhat counts as egress on SupaHost, how it's measured from the gateway's response bytes, plan allowances and add-ons, and practical ways to reduce it.
- Failed payment and the grace periodWhat happens when a SupaHost payment fails: your projects keep running, you have 14 days to update your card, and how to pay the invoice and keep your data safe.
- How long does a restore take?Measured SupaHost restore times, how long a project is offline during a restore, what makes restores slower, and what happens to other projects on the instance.
- Instance health alert: services unhealthyWhat SupaHost's "isn't responding" alert means, how health checks decide an instance is down (3 failed checks, about 3 minutes), common causes and what to check.
- IPv4 and IPv6 on SupaHostSupaHost instances have a static IPv4 address, so IPv4-only networks, CI runners and hosts work. How this differs from Supabase Cloud's IPv6-only direct database host.
- MCP server not connecting in your AI toolFix the SupaHost MCP server failing to connect in Claude Code, Cursor, VS Code and others: wrong URL, missing Bearer header, 401 invalid token, 403 scope errors and missing tools.
- OAuth broke after adding a custom domainGoogle, GitHub or Apple sign-in fails with redirect_uri_mismatch after a SupaHost custom domain goes active. Why the callback URL changes and what to update.
- Quota alert emails and going overWhat SupaHost's usage alert emails mean, when they're sent (80%, 90% or 100%), what happens when you go over your plan, and how to add capacity or turn alerts off.
- Resetting a project's database passwordSupaHost generates the postgres password for you, and you only need it for direct connections on Business. Where to find it, and what to do if it must change.
- Studio Logs and Reports pages are missingSupabase Studio's Logs, log explorer and Reports pages aren't available on SupaHost. Where to find function logs, slow queries, service logs and usage instead.
- Studio takes a while to openWhy Supabase Studio shows "Starting Supabase Studio…" for about 20 seconds on SupaHost, why it stops after 30 minutes idle, and what expired Studio links mean.
- Supabase CLI commands that don't work with SupaHostWhich Supabase CLI commands work with SupaHost (local dev, migrations, db diff, gen types, db dump over the tunnel) and which fail because they need the Supabase Management API.
- Writing a support request that gets solved fastHow to contact SupaHost support and what to include (instance and project names, UTC timestamps, request IDs, exact errors) so your problem can be found and fixed quickly.
Migration
Moving to SupaHost from Supabase Cloud, Firebase, Heroku and others.
13 articles- Migrate from Amazon RDSMove an Amazon RDS or Aurora PostgreSQL database to SupaHost: reach it from a machine in the VPC, dump with pg_dump, skip AWS-only extensions, restore and switch your app to the Data API.
- Migrate from Auth0Move Auth0 users into Supabase Auth on SupaHost: export users, bring over bcrypt password hashes, recreate social connections and roles, and switch your app's sign-in calls.
- Migrate from Firebase AuthMove Firebase Authentication users into a SupaHost project with the admin API, keep their passwords using Firebase scrypt hashes, and handle Google and other social sign-ins.
- Migrate from Firebase StorageCopy files from Firebase Storage (Cloud Storage for Firebase) into SupaHost Storage buckets, rewrite security rules as policies and update stored download URLs.
- Migrate from FirestoreMove Firestore collections into Postgres tables on SupaHost: design the schema, export documents with the Admin SDK, flatten them, load them in batches and switch your queries.
- Migrate from Heroku PostgresMove a Heroku Postgres database to a SupaHost project: capture a backup, clean up heroku_ext references, restore it over the SSH tunnel or another load path, and switch your app.
- Migrate from MySQLMove a MySQL or MariaDB database to Postgres on SupaHost with pgloader: type differences to expect, loading over the SSH tunnel or via a local Postgres, and checking the result.
- Migrate from NeonMove a Neon Postgres database to SupaHost: dump it over Neon's direct (non-pooled) endpoint, load it into a project, replace the Neon serverless driver and verify.
- Migrate from Render PostgresMove a Render Postgres database to SupaHost: dump it with the external connection string, restore it into a project, enable RLS and point your Render services at the Data API.
- Migrate from Supabase Cloud to SupaHostMove a Supabase Cloud project to SupaHost with the one-click import: what you need, what gets copied, what you redo by hand, and how to switch your app.
- Migrate from Vercel PostgresMove a Vercel Postgres (Neon-backed) database to SupaHost: dump it with the non-pooling URL, load it into a project and replace @vercel/postgres with supabase-js in your Vercel app.
- Move a self-hosted Supabase to SupaHostMove a self-hosted Supabase (Docker Compose) project to SupaHost: users with their original IDs and passwords, your schemas and data, Storage files, Edge Functions and cron jobs.
- Move an app from SQLite to PostgresMove a SQLite database and the app around it to Postgres on SupaHost: convert with pgloader, fix loose SQLite types and foreign keys, load the data and switch to supabase-js.
FAQs
Short answers to common questions about Supabase on SupaHost.
18 articles- Can an AI coding agent manage my database?Yes. The SupaHost MCP server lets Claude Code, Cursor, Codex and other agents inspect tables, run SQL, apply migrations and deploy Edge Functions, with read-only mode and scoped tokens.
- Can I connect from serverless and edge functions?Yes, over HTTP. Serverless and edge code talks to SupaHost through the Data API with supabase-js, which needs no connection pool. Direct Postgres connections aren't available there.
- Can I get a database per pull request?On Pro and above, branching copies a project (schema only, or with data) into a new project you can point a preview deployment at. How it works, what isn't copied and how to clean up.
- Can I query Postgres from a frontend without a backend?Yes. supabase-js calls the Data API straight from the browser with the anon key, and Row Level Security decides which rows each user can read or change.
- Can I use Clerk, Auth0 or Firebase Auth instead of Supabase Auth?Not as a drop-in. SupaHost projects only accept JWTs signed by the project itself, so third-party tokens can't drive RLS directly. Here are the patterns that do work.
- Can I use Drizzle or Prisma without supabase-js?On Business and Enterprise, yes, through the SSH tunnel. On other plans, ORMs can't connect at runtime, but you can still use them to define your schema and generate SQL migrations.
- Can I use Postgres as a message queue?Yes. Every SupaHost project can enable Queues (pgmq), a Postgres-native message queue with visibility timeouts and archiving, managed from the dashboard's Queues tab.
- Can I use SupaHost as a standalone Postgres database?Partly. Every project is a full Postgres 17 database, but direct Postgres connections are only available on Business and Enterprise through an SSH tunnel. Here's what works on each plan.
- Can I use SupaHost for a mobile app?Yes. Flutter, Swift, Kotlin and React Native apps use the regular Supabase client libraries with your SupaHost project URL. Notes on sign-in redirects, files and realtime for mobile.
- Can I use SupaHost with a Next.js app on Vercel?Yes. A Next.js app on Vercel uses @supabase/ssr and supabase-js with your SupaHost project URL. Set three env vars, allow preview URLs for Auth, and query over HTTP.
- Can SupaHost scale as my app grows?SupaHost scales vertically: each plan is a bigger VM, and changing plan resizes it in a minute or two. Capacity guides per plan, what doesn't exist (read replicas), and when to look beyond.
- Do SupaHost projects pause when inactive?No. SupaHost projects never pause for inactivity. Your instance runs all the time, and only Studio sleeps when idle. Here's what that means for low-traffic apps.
- How do I isolate tenant data in a multi-tenant SaaS?Two ways on SupaHost: shared tables with a tenant_id column and Row Level Security, or one project per tenant on the same instance. How each works and when to pick it.
- How do I run background jobs?Run background work on SupaHost with pg_cron, Queues (pgmq), database triggers with pg_net, and Edge Functions, and know the limits that decide which to use.
- How do I run scheduled (cron) tasks?Every SupaHost project has pg_cron built in. Schedule SQL with cron.schedule or the dashboard's Cron tab, call Edge Functions on a timer, and check run history.
- How many projects can I run on one instance?Builder includes 5 projects, Pro 15 and Business 30, and you can add more for $3 a month each. What projects share on an instance and how to tell when it's getting full.
- Is SupaHost real Supabase?Yes. SupaHost runs the open-source Supabase stack (Postgres, Auth, PostgREST, Realtime, Storage, Edge Runtime, Studio) on your own VM. What's the same, what differs, and who runs it.
- Where is my data stored?Your database and files live on your instance's VM in the region you picked, and backups go to a private bucket in the same region. Which regions exist and which services touch your data.
Didn’t find your error?
Send us the exact message, your project name and roughly when it happened (UTC). We usually reply within a working day.