Hire Lovable Xperts
Migration

Post-Migration Supabase Gotchas: Pausing, Pooler Limits, Backups

Moving off Lovable Cloud onto your own Supabase project hands you three things Lovable quietly managed: a free-tier project that Supabase may pause after a 7-day stretch of low activity, connection limits that need the right pooler, and backups that are now entirely your responsibility. None of these appear on day one — they surprise you a week or a month later. Here is each one and its fix.

By Hire Lovable Xperts · Last verified: 2026-07-19

Why did my Supabase project pause about a week after migrating?

Because it is on the Free Plan. Supabase's production guidance states it may pause Free Plan projects that show low activity over a 7-day period to save server resources. A freshly migrated project with little real traffic hits that threshold easily. A paused project stops serving requests — your app looks down — but the data is safe and you restore it from the Supabase dashboard.

This catches teams who migrate a low-traffic internal tool or a not-yet-launched app: a week after moving, the app returns connection errors and it looks like the migration failed. It did not — Supabase simply paused an idle Free Plan project. Paid plans are not paused for inactivity.

A paused project isn't a failed migration. Restore it from the Supabase dashboard — your data is intact — then decide whether to upgrade or keep it warm.

Related: The full move-off-Lovable playbook

How do I stop my Supabase project from pausing?

Two reliable options: upgrade to a paid plan, which Supabase does not pause for inactivity, or keep genuine activity flowing to the database so it never crosses the low-activity threshold. Restoring a already-paused project is a one-click action from the dashboard, but restoring is reactive — for anything user-facing, removing the pause risk entirely is the safer play.

  1. If the project is already paused, open the Supabase dashboard, select the project, and click Restore — it comes back with all data intact.
  2. For a production or user-facing app, upgrade to a paid plan so inactivity pausing no longer applies.
  3. For a genuinely low-traffic app you want to keep free, ensure something touches the database at least every few days — a real health-check route beats an artificial ping.
  4. Set an uptime monitor against a route that reads from Supabase, so you learn the project paused within minutes instead of from a user complaint.
Don't fake activity with a pointless cron just to dodge a pause — if the app matters enough to keep online, it's worth the paid plan; if it doesn't, a restore-on-demand is fine.

Who backs up my database now that I've left Lovable?

You do. Supabase automatically backs up Pro, Team, and Enterprise projects daily, and point-in-time recovery is a paid add-on — none of that applies on the Free Plan. Supabase explicitly recommends Free Plan projects export their own data regularly with the CLI db dump command and keep off-site copies. Leaving Lovable means backup responsibility transfers to you the moment you cut over.

There is a sharp edge here: deleting a Supabase project permanently removes all associated data, including any backups. On the Free Plan with no automated backup, an accidental delete or a bad migration has no safety net unless you made your own dump.

  1. Schedule a regular dump: supabase db dump --db-url "$DB_URL" -f backup-$(date +%F).sql
  2. Store each dump off-site (object storage or a separate machine) — not only on the laptop that ran it.
  3. If backups are business-critical, upgrade to a plan with automated daily backups and add point-in-time recovery.
  4. Test a restore at least once into a scratch project — an untested backup is a guess, not a backup.
Deleting a Supabase project erases its data and backups permanently. On the Free Plan, your own db dump is the only thing standing between a fat-finger and total data loss.

Related: How to export data and users with the CLI

What are Supabase's connection limits, and when do I need the pooler?

Supabase gives you three ways in, and picking the wrong one exhausts connections. A direct connection suits long-lived servers but is IPv6-only unless you add IPv4. The session pooler (port 5432) is IPv4-friendly for persistent backends. The transaction pooler (port 6543) is built for serverless and edge functions that open many short-lived connections. Lovable hid this choice; on your own project you make it.

Each pooler caps two separate numbers: client connections (how many clients attach to the pooler) and backend connections (how many the pooler opens to Postgres), both bounded by your compute tier. Serverless functions are the classic trap — dozens of concurrent invocations each grabbing a connection will exhaust a direct connection fast, which is exactly what the transaction pooler on 6543 exists to absorb.

Supabase connection methods after migration
MethodPortBest forWatch out for
Direct connection5432Persistent VMs / long-lived containersIPv6-only unless you add the IPv4 add-on
Session pooler (Supavisor)5432Persistent backends on IPv4-only networksOne backend connection held per client session
Transaction pooler (Supavisor)6543Serverless / edge functions, many transient connectionsDoes not support prepared statements

Why do my serverless or edge functions run out of connections?

Because they open a fresh connection per invocation and, at any real concurrency, blow past a direct connection's ceiling. The fix is to route serverless and edge workloads through the transaction pooler on port 6543, which is purpose-built for many short-lived connections. The one constraint: transaction mode does not support prepared statements, so disable them in your client or ORM.

  1. Point serverless/edge database traffic at the transaction pooler connection string (port 6543) rather than the direct or session string.
  2. Disable prepared statements in your client — for many Postgres libraries that means a prepare: false or equivalent flag.
  3. Keep persistent backends (a long-running Node server) on the direct or session connection instead — they benefit from reused connections.
  4. If you still hit limits, check your compute tier's connection caps before assuming a code bug.
Match the connection method to the workload: transient serverless calls → transaction pooler (6543); long-lived servers → direct or session (5432).

What's the full list of surprises after leaving Lovable Cloud?

The three big ones are pausing, backups, and connection pooling — but they share a root cause. Lovable Cloud managed the Supabase project for you, so its plan tier, backup posture, and connection routing were invisible. Owning the project means owning all three decisions. Use this table as a post-migration checklist to close each gap before it turns into an incident.

Post-migration Supabase checklist
SurpriseWhen it bitesFix
Free project paused~7 days of low activityUpgrade to a paid plan, or restore from dashboard + monitor uptime
No automated backupsFirst data loss or bad migrationSchedule regular db dump off-site, or upgrade for daily backups + PITR
Connection exhaustionTraffic spike / serverless concurrencyUse the transaction pooler (6543) for serverless, direct/session for servers
Permanent deleteAccidental project deletionNever rely on a single copy — keep off-site dumps

Related: Move off Lovable without breaking it · Migrate your database to your own Supabase · Have an engineer harden the new setup

Frequently asked questions

Why did my Supabase project pause after I migrated off Lovable?
It's on the Free Plan. Supabase may pause Free Plan projects that show low activity over a 7-day period to save server resources. A freshly migrated, low-traffic project hits that easily. The data is safe — restore the project from the Supabase dashboard, then upgrade or keep genuine activity flowing if you need it always-on.
Will I lose data when a free Supabase project pauses?
No. Pausing makes the project temporarily unavailable, but your data remains intact and you restore the project from the Supabase dashboard. Data loss only happens if you delete a project — that permanently removes all data and backups. Pausing and deleting are very different events.
How do I keep a Supabase project from pausing?
Upgrade to a paid plan, which Supabase does not pause for inactivity, or keep real activity hitting the database so it never crosses the low-activity threshold. An already-paused project restores in one click from the dashboard, but for anything user-facing, removing the pause risk entirely is safer than reacting to it.
Does the Supabase free tier back up my database automatically?
No. Supabase automatically backs up Pro, Team, and Enterprise projects daily, and point-in-time recovery is a paid add-on. Free Plan projects get neither. Supabase recommends Free Plan users export their data regularly with the CLI db dump command and keep off-site copies — backup is your responsibility after migrating.
Which Supabase connection method should my app use?
Long-lived servers use a direct connection (IPv6, or IPv4 with the add-on) or the session pooler on port 5432. Serverless and edge functions, which open many short-lived connections, should use the transaction pooler on port 6543 — just note it doesn't support prepared statements, so disable them in your client.
Why do my serverless functions exhaust database connections?
Each invocation opens its own connection, and at real concurrency that overruns a direct connection's ceiling. Route serverless and edge traffic through the transaction pooler on port 6543, which is built for many transient connections. Disable prepared statements, since transaction mode doesn't support them, and keep persistent servers on the direct or session connection.
What happens if I accidentally delete my Supabase project?
Deletion is permanent: Supabase removes all associated data, including any backups stored on its side, and the action is irreversible. On the Free Plan with no automated backups, your own off-site db dump is the only recovery path. Always keep at least one recent dump somewhere other than the machine that created it.

Talk to a senior engineer — not a salesperson.

Book a free 30-minute audit call. We'll diagnose what's wrong and tell you exactly what it costs to fix.

Book a free audit call