# Supabase Problems & Issues 2026 - Paused Projects, RLS & Billing

Source: https://www.tryorbye.com/products/supabase
Last analyzed: 2026-10-21
Try or Bye score: 62/100

## Verdict: Try with caution

Supabase works for some teams, but users report recurring problems (score 62/100). Most reported issues: Supabase project paused - free projects pause after 1 week; Why is my Supabase bill so high? Per-project compute adds up; Unexpected billing - charged for ghost compute. Not a good fit for: Production apps requiring 24/7 uptime on free tier; Small teams needing collaboration ($25 to $599 gap); Apps with high egress/bandwidth needs. Users most often switch to Firebase, Neon, PlanetScale.

## What it is

Backend-as-a-service platform built on PostgreSQL. Offers database, authentication, storage, edge functions, and real-time subscriptions. Open-source and self-hostable. Developers praise the experience, but complain about free projects pausing, per-project compute billing, RLS errors, connection limits, and slow support.

## Common errors & fixes

### Supabase Project Paused

Free-plan projects are paused after 7 days of low activity. Click 'Resume project' in the dashboard to bring it back with data intact; upgrade to Pro (or keep it active) to stop it happening.

1. **Resume the project from the dashboard** — Open supabase.com/dashboard and select your organization Open the paused project Click 'Resume project' and confirm Wait a few minutes for the database to come back online
2. **Upgrade the organization to Pro** — Go to Organization Settings > Billing Change the plan to Pro ($25/month) Pro, Team and Enterprise projects are never paused for inactivity
3. **Back up free projects yourself** — Free projects have no automatic backups Run 'supabase db dump' regularly or pg_dump via the pooler connection string Store dumps outside Supabase

Full guide: https://www.tryorbye.com/products/supabase/issues/project-paused

### Supabase Max Client Connections Reached

The app opened more connections than your compute size or pooler allows. Switch to the transaction pooler (port 6543), lower the client connection limit, or upgrade compute.

1. **Use the transaction pooler on port 6543** — Dashboard > Connect > choose Transaction pooler Replace your DATABASE_URL with that string Disable prepared statements in your client (transaction mode doesn't support them)
2. **Limit connections per client** — For Prisma add connection_limit=1 to the URL for serverless Set a small pool size in node-postgres/Drizzle Close connections when done
3. **Raise Pool Size for session mode** — Database Settings > Connection pooling Increase Pool Size within your compute limit
4. **Check pooler logs** — Dashboard > Logs > Pooler Look for the client or role creating too many connections
5. **Upgrade compute** — Project Settings > Compute and Disk Small allows 90/400 connections, Medium 120/600, Large 160/800

Full guide: https://www.tryorbye.com/products/supabase/issues/max-client-connections-reached

### Supabase 'New Row Violates Row-Level Security Policy' Error

RLS is on but no policy allows the write. Add an INSERT (or UPDATE) policy with a WITH CHECK that matches the row, plus a SELECT policy if you return the inserted row.

1. **Add an INSERT policy** — Dashboard > Authentication > Policies > select table New policy > For INSERT, target role authenticated WITH CHECK: auth.uid() = user_id
2. **Make sure the user is signed in** — Check supabase.auth.getUser() returns a user before writing Server-side, create the client with the user's session cookies, not the anon key alone
3. **Send the column the policy checks** — Include user_id in the insert payload or set a default of auth.uid() on the column
4. **Add a SELECT policy for returned rows** — If you call .insert().select() or .upsert(), add a SELECT policy allowing the user to read their own rows
5. **Test as the real role** — SQL Editor runs as postgres and bypasses RLS Use the role switcher in the SQL editor to impersonate an authenticated user

Full guide: https://www.tryorbye.com/products/supabase/issues/rls-policy-violation

### Supabase Confirmation Email Not Sending

The built-in email service is rate limited to a few emails per hour and meant for testing. Set up custom SMTP (Resend, SendGrid, Mailgun) and raise the rate limit.

1. **Configure custom SMTP** — Dashboard > Authentication > Emails > SMTP Settings Enable custom SMTP Enter host, port, username, password and sender address from your provider
2. **Raise the email rate limit** — Dashboard > Authentication > Rate Limits Increase emails per hour to what your SMTP plan supports
3. **Check URL configuration** — Authentication > URL Configuration Set the Site URL to your production domain and add redirect URLs
4. **Check auth logs** — Dashboard > Logs > Auth Look for SMTP errors or rate-limit responses

Full guide: https://www.tryorbye.com/products/supabase/issues/auth-emails-not-sending

### Supabase Auth Redirects to Localhost

Supabase falls back to the Site URL when redirectTo isn't in the allowlist. Set the Site URL to your production domain and add every app URL to Redirect URLs.

1. **Set the Site URL** — Dashboard > Authentication > URL Configuration Set Site URL to https://yourdomain.com (no trailing slash)
2. **Add Redirect URLs** — Add production, preview and localhost URLs Use wildcards for preview deployments, e.g. https://*-yourteam.vercel.app/**
3. **Pass redirectTo explicitly** — In signInWithOAuth / signInWithOtp pass options.redirectTo with the current origin
4. **Check the OAuth provider callback** — In Google/GitHub console the redirect URI must be https://<project>.supabase.co/auth/v1/callback

Full guide: https://www.tryorbye.com/products/supabase/issues/auth-redirect-localhost

### Supabase 'Invalid Refresh Token: Refresh Token Not Found'

Refresh tokens are single-use; if middleware refreshes the session but doesn't write the new cookie back, the next request uses a dead token. Return the response object your cookie setAll modified.

1. **Return the same response from middleware** — Use createServerClient from @supabase/ssr in middleware In cookies.setAll write cookies to the response object Return exactly that response object
2. **Use a cookie-aware client in route handlers** — Create createServerClient with await cookies() inside the handler Make sure the middleware matcher covers the route
3. **Use getUser() on the server** — Call supabase.auth.getUser() rather than trusting getSession() server-side
4. **Sign the user out cleanly on this error** — Catch the error, call supabase.auth.signOut() and redirect to login

Full guide: https://www.tryorbye.com/products/supabase/issues/invalid-refresh-token

### Supabase Edge Function 546 WORKER_LIMIT Error

Error 546 means the function exceeded its CPU (2 s) or memory (250 MB) budget or wall-clock limit. Check function logs for which limit was hit and split or optimize the work.

1. **Find which limit was hit** — Dashboard > Edge Functions > your function > Logs Look for memory or CPU-time messages; check the Metrics tab
2. **Reproduce locally with debug** — Run supabase functions serve <name> --debug Check stack traces and unresolved promises
3. **Split heavy work** — Process data in smaller chunks Move long jobs to a queue or background worker
4. **Add timeouts to external calls** — Wrap fetch calls with AbortController timeouts
5. **Fix boot errors** — Check that imports are Deno-compatible Set secrets with supabase secrets set before deploying

Full guide: https://www.tryorbye.com/products/supabase/issues/edge-function-546-worker-limit

### Supabase Storage Upload Failed

Most upload failures are a missing INSERT policy on storage.objects, a file larger than the bucket limit (413), or an invalid key/MIME type (400).

1. **Add a storage policy** — Dashboard > Storage > Policies Create an INSERT policy on storage.objects scoped to your bucket_id Add UPDATE and SELECT policies if you use upsert
2. **Raise the file size limit** — Storage > select bucket > Edit bucket Set the maximum file size; for large files use resumable (TUS) uploads
3. **Clean the object key** — Remove special characters and spaces from the file path Pass bucket name and path in the correct arguments
4. **Set a valid contentType** — Pass contentType (e.g. image/jpeg) in the upload options Make sure it's in the bucket's allowed MIME types

Full guide: https://www.tryorbye.com/products/supabase/issues/storage-upload-failed

### Supabase 'Canceling Statement Due to Statement Timeout'

The query ran longer than the role's statement_timeout (API roles default to a few seconds). Add indexes and optimize the query first; raise the timeout for the role only if needed.

1. **Find the slow query** — Dashboard > Reports > Query Performance Run EXPLAIN ANALYZE, or .explain() from supabase-js
2. **Add indexes** — Index columns used in filters, joins and RLS policies (e.g. user_id) Use the Index Advisor in the dashboard
3. **Optimize RLS policies** — Wrap auth.uid() as (select auth.uid()) so it runs once per query Avoid per-row function calls in policies
4. **Raise statement_timeout for the role** — Run: alter role authenticated set statement_timeout = '15s'; Reload config or restart the project if the change doesn't apply
5. **Paginate large requests** — Use .range() or limit/offset instead of selecting whole tables

Full guide: https://www.tryorbye.com/products/supabase/issues/statement-timeout

### Supabase Realtime Not Working

Usually the table isn't added to the supabase_realtime publication or RLS hides rows from the subscriber. Enable the table for Realtime and make sure the user has a SELECT policy.

1. **Add the table to the publication** — Dashboard > Database > Publications > supabase_realtime Toggle on your table
2. **Check RLS for the subscriber** — Make sure a SELECT policy lets the authenticated user read those rows Test the select as that role, not as postgres
3. **Verify filters** — Check schema, table, event ('*' to test) and .eq() filter values match the changed row
4. **Log everything on a minimal channel** — Subscribe with event '*' and log payloads to isolate the problem
5. **Check quotas** — Pro includes 500 concurrent connections and 5M messages; check Realtime usage in the dashboard

Full guide: https://www.tryorbye.com/products/supabase/issues/realtime-not-working

### Supabase Database Connection 'Network Is Unreachable'

The direct host db.<ref>.supabase.co is IPv6-only. Use the Session or Transaction pooler connection string (IPv4) from the Connect dialog, or buy the IPv4 add-on.

1. **Switch to the pooler connection string** — Dashboard > Connect Copy the Session pooler (port 5432) or Transaction pooler (port 6543) string Note the username format postgres.<project-ref>
2. **Use transaction mode for serverless** — Pick port 6543 and disable prepared statements
3. **Buy the IPv4 add-on if you need direct connections** — Project Settings > Add-ons > Dedicated IPv4 address

Full guide: https://www.tryorbye.com/products/supabase/issues/ipv6-network-unreachable

### Supabase Start Not Working (Docker Container Unhealthy)

Local 'supabase start' failures are usually leftover containers, port conflicts or an unsupported Docker runtime. Stop everything, remove stale containers and retry with --debug.

1. **Stop and clean up** — Run supabase stop --no-backup Run docker ps -a and remove leftover supabase_* containers
2. **Debug the unhealthy container** — Run supabase start --debug Run docker logs <container_name> for the failing service
3. **Free the ports** — Check another project or app isn't using ports 54321-54324 Change ports in supabase/config.toml if needed
4. **Use Docker Desktop or update the CLI** — Switch from Rancher Desktop to Docker Desktop if vector is unhealthy Update the CLI for the Podman health-check fix, or use --ignore-health-check
5. **Fix Linux permissions** — Add your user to the docker group instead of running with sudo

Full guide: https://www.tryorbye.com/products/supabase/issues/supabase-start-docker-error

## Common problems

- **Supabase project paused - free projects pause after 1 week** (pricing): Free projects with low activity over 7 days are paused automatically; paused projects can be restored from the dashboard for up to a year. Users report demos breaking and run keep-alive cron jobs to avoid it. Free projects also have no backups.
- **Why is my Supabase bill so high? Per-project compute adds up** (pricing): Pro is $25 but each project is billed its own compute; the $10 credit covers only one Micro instance, so a second project adds $10+ and larger instances run $60-$410/month. Egress allowance rose to 250 GB on Pro, but MAU, disk, PITR ($100/month) and add-ons still push small apps past $100/month.
- **Unexpected billing - charged for ghost compute** (pricing): Users report being charged $300+ when expecting $25/month due to 'ghost compute' resources. Billing for resources users weren't aware they were using. Support often unresponsive while charges accumulate. Small unpaid bills ($16) result in immediate project suspension.
- **Supabase down again? Outages still frequent in 2026** (reliability): Status trackers log hundreds of Supabase incidents since 2021. In September 2026 alone: Nano projects became unresponsive after long uptime (fixed by manual restart), a Dashboard/permissions incident and an eu-west-1 hardware failure; in August project creation failed for ~2.7 hours.
- **No live chat even on Enterprise - support feels outdated** (support): No live chat support even on Enterprise plans, which feels outdated in 2026. No phone support at any tier. Free users get Discord community support with variable response times. Complex Postgres issues get bounced back as 'database questions, not Supabase questions.'
- **RLS policies complex and impact performance significantly** (usability): Row Level Security is powerful but performance impact is significant, especially for queries scanning every row. Calling functions in RLS policies evaluates for each row, causing slowdowns. Complex workflows still need app-level checks. Learning curve is steep for developers.
- **Auth emails stop sending - 'email rate limit exceeded'** (reliability): The built-in email sender is only meant for testing and allows a handful of auth emails per hour, so confirmation and password-reset emails silently stop once real users sign up. Custom SMTP is effectively mandatory for production.
- **Local development with CLI is unreliable - Docker issues** (usability): The Supabase CLI for local development has broken Docker containers, migration system issues, and breaks frequently. Val Town reported the CLI couldn't be reliably used - migrations failed, containers wouldn't start. Forces developers to test against remote database.
- **Real-time subscription limits cause dropped connections** (reliability): Subscription limit exceeded errors when active subscriptions surpass plan limits. Connection limits cause WebSocket drops. JavaScript timer throttling prevents heartbeats, causing silent disconnections. High-concurrency apps hit these limits quickly.
- **Database hits connection limits as user base grows** (performance): Each compute instance has maximum database connections and connection pooler limits. Real-world reports of queries taking 8+ seconds, database hitting connection limits, and real-time subscriptions dropping constantly as user base grows. Throttling occurs when IOPS limits hit.
- **Edge Functions cold starts and execution limits** (performance): Edge Functions have 60-second execution limit and 2-second CPU time per request. Cold starts historically ranged from 400ms to 1.2s. Web Worker API not available. Heavy long-running jobs must be moved to background workers. Not suitable for all serverless use cases.
- **Team plan jumps to $599/month - big leap from $25 Pro** (pricing): The jump from Pro ($25/month) to Team ($599/month) is huge, and Team keeps the same usage quotas as Pro - the money buys SOC 2, ISO 27001, scoped roles, SSO and longer backups/logs. Uptime SLAs need Enterprise with custom pricing.
- **Inconsistent documentation frustrates developers** (onboarding): Documentation is inconsistent and can frustrate developers navigating advanced features. Lack of easy access logs makes debugging database issues challenging. Knowledge base needs more troubleshooting guides for edge cases. Auth documentation especially problematic.
- **Auth errors and email link failures** (reliability): 500 errors in Auth typically indicate database or SMTP provider issues. Email link authentication commonly fails with 'Database error finding user from email link.' Session timeouts and bugs cause work loss. Auth-helpers package being deprecated adds migration burden.
- **Can't connect to Supabase database - direct connection is IPv6 only** (integrations): The direct host db.<ref>.supabase.co resolves only to IPv6, so many hosts (Railway, Fly regions, home networks, some CI) fail with 'Network is unreachable'. The free fix is the Supavisor pooler string; a dedicated IPv4 address is a paid add-on.

## What users like

- **Excellent developer experience and rapid prototyping**: Supabase excels at rapid MVP development. The dashboard, auto-generated APIs, and instant database setup allow developers to prototype quickly. Great for hackathons and early-stage startups needing to ship fast.
- **Open-source and self-hostable - no vendor lock-in**: Built on PostgreSQL with open-source stack. You can export your database with standard pg_dump. Self-hosting is possible with Docker. Minimal vendor lock-in compared to proprietary BaaS alternatives like Firebase.
- **Real PostgreSQL with full SQL capabilities**: Unlike Firebase's NoSQL, Supabase uses real PostgreSQL. Full SQL support, joins, transactions, and mature ecosystem. Developers familiar with SQL can leverage existing knowledge. No learning new query language.
- **All-in-one platform - database, auth, storage, functions**: Supabase provides database, authentication, file storage, edge functions, and real-time subscriptions in one platform. Reduces need to integrate multiple services. Unified dashboard for all backend needs.
- **Generous free tier limits for development**: Free plan includes 500MB database storage, 2GB egress, 50,000 monthly active users, 1GB file storage, and 500K edge function invocations. Good enough for development and small projects (when not paused).
- **Strong community and active development**: Active Discord community with helpful developers. Regular updates and new features (Multigres sharding announced 2025). Product Hunt awards. Team is responsive on GitHub and social media.

## Pricing

- **Free**: $0 (free) — hidden costs: Projects pause after 1 week of low activity; no backups on Free
- **Pro**: $25 (monthly) — hidden costs: Every extra project pays its own compute ($10+/month each, only one is covered by credits); overages: $0.00325/MAU, $0.125/GB disk, $0.09/GB egress, $0.0213/GB storage, $2 per 1M function calls; PITR $100/month per 7 days; custom domain $10/month; phone MFA $75/month; log drains $60/month
- **Team**: $599 (monthly) — hidden costs: Same usage overages and per-project compute as Pro; $574 jump over Pro for mostly compliance/role features
- **Enterprise**: usage_based — hidden costs: Custom contract via sales

## Who should and shouldn't use it

- **Production apps requiring 24/7 uptime on free tier** — Avoid: Free tier projects pause after 7 days without traffic. If your app needs constant availability and you can't afford $25/month, use Neon (auto-scaling free tier) or self-host Supabase.
- **Small teams needing collaboration ($25 to $599 gap)** — Avoid: The jump from Pro ($25) to Team ($599/month) is massive. No middle-ground plan for small teams needing SSO or collaboration. Consider self-hosting or alternatives like Neon + separate auth.
- **Apps with high egress/bandwidth needs** — Avoid: Egress costs ($0.09/GB) stack quickly. A small app serving images or video can jump from $25 to $100+ monthly. Calculate expected bandwidth before committing. Consider Cloudflare R2 for storage.
- **Teams requiring complex RLS at scale** — Depends: RLS is powerful but impacts performance significantly on large tables. Complex policies need optimization. May need hybrid approach with app-level authorization for performance-critical queries.
- **Developers needing reliable local development** — Depends: Local development with CLI has issues - Docker containers break, migrations fail. Works for some, frustrating for others. Test the CLI workflow before committing to Supabase for your project.
- **Indie hackers and MVPs needing fast backend** — Good fit: Excellent for rapid prototyping. Auto-generated APIs, instant database, built-in auth. Perfect for hackathons and MVPs. Just plan for the $25/month Pro plan if you launch to avoid pausing.
- **Developers comfortable with PostgreSQL** — Good fit: Unlike Firebase NoSQL, Supabase uses real PostgreSQL. Full SQL support, transactions, joins. Leverage existing SQL knowledge. No new query language to learn. Can migrate to any Postgres host.
- **Teams wanting to avoid vendor lock-in** — Good fit: Open-source stack, self-hostable, standard PostgreSQL. Export with pg_dump anytime. Lower lock-in than Firebase. Can run on own infrastructure if costs become prohibitive.

## Alternatives

- **Firebase** (https://www.tryorbye.com/products/firebase): Users switch to Firebase for battle-tested reliability, real-time sync, and mobile-first features. Firebase has global CDN, offline sync, and generous free tier without pausing. Better for mobile apps.
- **Neon** (https://www.tryorbye.com/products/neon): Users switch to Neon for serverless PostgreSQL with auto-scaling, database branching, and no project pausing on free tier. May 2025: Databricks acquired Neon. Great for cost-conscious teams.
- **PlanetScale** (https://www.tryorbye.com/products/planetscale): Users needing MySQL and infinite scaling switch to PlanetScale. Built on Vitess (powers YouTube). Automatic performance tuning with Boost. Note: Removed free tier in 2024.
- **Railway** (https://www.tryorbye.com/products/railway): Users switch to Railway for simpler deployment and pricing. One-click deploys, better local development experience. Good for full-stack apps needing database + hosting in one place.
- **Render** (https://www.tryorbye.com/products/render): Val Town migrated from Supabase to Render for simpler database setup without the BaaS overhead. Good when you just need Postgres without the extra features. Predictable pricing.

## FAQ

### Why does my Supabase project keep pausing?

Free tier projects automatically pause after 7 days without receiving traffic. Supabase does this to manage infrastructure costs. To prevent pausing: upgrade to Pro ($25/month), set up a cron job to ping your database, or switch to Neon which doesn't pause free projects.

### Why is my Supabase bill so high?

Supabase uses usage-based pricing beyond plan limits. Common culprits: egress costs ($0.09/GB), database size growth ($0.125/GB beyond 8GB), and compute hours. Check your dashboard usage tab. Some users report 'ghost compute' charges - contact support if charges seem wrong.

### Is Supabase production ready?

Supabase is used in production by many companies, but has limitations: 691+ recorded outages over 3 years, project pausing on free tier, and support issues. For production: use Pro plan minimum, implement proper error handling, have a backup strategy. Enterprise clients get SLAs.

### Why are my Supabase RLS policies slow?

RLS policies are evaluated per-row, significantly impacting queries that scan many rows. Solutions: add indexes on columns used in policies, restructure queries (use subqueries efficiently), move complex logic to security definer functions. Consider app-level auth for performance-critical paths.

### How do I contact Supabase support?

Free tier: Discord community only. Pro: Email support with variable response times. Team ($599): Priority email support. Enterprise: Dedicated support. No live chat or phone support at any tier. For urgent issues, GitHub discussions or Discord may get faster community responses.

### Is Supabase better than Firebase?

Depends on your needs. Supabase: PostgreSQL, open-source, SQL support, self-hostable, lower vendor lock-in. Firebase: Battle-tested reliability, better mobile support, offline sync, global CDN. Firebase is better for mobile; Supabase for SQL-familiar developers wanting open-source.

### Can I self-host Supabase?

Yes, Supabase is open-source and self-hostable using Docker. You get the full stack: database, auth, storage, functions. Benefits: no project pausing, full control, no egress costs. Drawbacks: you manage infrastructure, no managed support. Good option if hosted costs become prohibitive.

### Why do my Supabase real-time subscriptions drop?

Common causes: subscription limit exceeded (plan-based), connection pooler limits hit, JavaScript timer throttling preventing heartbeats, database bottleneck limiting message throughput. Solutions: audit active subscriptions, consolidate where possible, upgrade plan, implement reconnection logic.

### What are the best Supabase alternatives?

Top alternatives: Firebase (battle-tested, great for mobile), Neon (serverless Postgres, no pausing, acquired by Databricks), PlanetScale (MySQL, infinite scaling, no free tier), Railway (simpler deployment), self-hosted Supabase (full control, no costs). Choice depends on your needs and budget.

### Why is Supabase local development not working?

Common CLI issues: Docker containers failing to start, migration system problems, CLI breaking after updates. Solutions: ensure Docker is running and updated, try 'supabase stop --no-backup && supabase start', clear supabase cache, reinstall CLI. Some teams resort to testing against remote database.

### How do I migrate away from Supabase?

Supabase uses standard PostgreSQL, making migration straightforward: use pg_dump for database export, export storage files via API or dashboard, migrate auth users (may require custom scripts). Low vendor lock-in compared to Firebase. Self-hosting is also an option before full migration.

### Is Supabase worth it for startups?

For MVPs and rapid prototyping: excellent. The $25/month Pro plan is reasonable for launched products. Watch for: egress costs scaling unexpectedly, Team plan jump to $599/month, support limitations. Calculate expected usage before committing. The open-source nature provides an exit strategy.

### How do I restore a paused Supabase project?

Open the Supabase Dashboard, go to your organization, select the paused project and click 'Resume project'. Free projects can be restored for up to 1 year after pausing; data and settings come back intact. Upgrading to Pro stops pausing.

### How many connections does Supabase allow?

It depends on compute size: Micro allows 60 direct and 200 pooler connections, Small 90/400, Medium 120/600, Large 160/800. Use the transaction pooler (port 6543) for serverless apps to stay under the limit.

### How much does Supabase Pro really cost?

$25/month includes $10 of compute credit, enough for one Micro project. Each additional project adds its own compute (from $10/month), plus usage overages for MAU, disk, egress and add-ons like PITR ($100/month). Spend cap is on by default.

---
Try or Bye aggregates problem patterns from user reviews, forums, and app stores. Methodology: https://www.tryorbye.com/methodology