Migrate n8n from Supabase to Neon on Render

September 16, 2025 (1mo ago)

Neon’s serverless Postgres brings branching and autoscaling to the same projects you previously ran on Supabase. If you already have n8n running on Render with Supabase as the backing database, you can migrate in under 30 minutes using Neon’s import flow, then swap your Render environment variables to the Neon pooler connection string.

⚠️ Protect your credentials. Replace all example hostnames, usernames, and passwords below with values from your own projects. Never commit real secrets to Git.

Prerequisites

Step 1: Prepare Supabase connection details

  1. In Supabase, find connection details via top left Connect icon.
  2. Grab the entire Session Pooler URI (IPv4-friendly).
  3. Copy the full string somewhere safe; you’ll paste it into Neon’s import tool.

Example (replace values accordingly):

postgresql://<supabase-user>:<supabase-password>@<supabase-pooler-host>:5432/postgres

Step 2: Run Neon’s import tool

  1. In the Neon console, Projects page.
  2. Click Import data ➜ under Check compatibility.
  3. Paste the Supabase session pooler URI you saved earlier.
  4. CLick on Run Checks and go through creating a new project and to start importing.
  5. Wait for Neon to finish copying tables, indexes, and data.

Step 3: Verify data inside Neon

Go through the database that was just imported and check that all the data is there.

If you self-hosted custom schemas or extensions on Supabase, review them and recreate any role grants or triggers you need.

Step 4: Update Render environment variables

Render only exposes IPv4 networking on the free tier, so point n8n at Neon’s pooler endpoint (ends with -pooler.<region>.neon.tech). Set the following environment variables in your Render service (replace placeholders in angle brackets):

KeyValue
DB_TYPEpostgresdb
DB_POOL_MODEtransaction
DB_POSTGRESDB_HOST<neon-pooler-host> (e.g., hello-123-pooler.<region>.neon.tech)
DB_POSTGRESDB_PORT5432
DB_POSTGRESDB_DATABASE<neon-database> (e.g., neondb)
DB_POSTGRESDB_USER<neon-user> (e.g., neondb_owner)
DB_POSTGRESDB_PASSWORD<neon-password>
DB_POSTGRESDB_MAX_POOL_SIZE10
DB_POSTGRESDB_CONNECTION_TIMEOUT600
DB_POSTGRESDB_SSLMODErequire
DB_POSTGRESDB_CHANNELBINDINGrequire
DB_POSTGRESDB_SSL_REJECT_UNAUTHORIZEDtrue
DB_POSTGRESDB_SSL_CA_FILE/etc/ssl/certs/ca-certificates.crt
GENERIC_TIMEZONEe.g., Asia/Singapore
N8N_BLOCK_ENV_ACCESS_IN_NODEfalse
N8N_ENCRYPTION_KEYPaste your existing key (do not rotate unless needed)
N8N_RUNNERS_ENABLEDtrue
N8N_HOST0.0.0.0
N8N_PROTOCOLhttps
N8N_PROXY_HOPS1
N8N_PORT5678
PORT5678
N8N_VERSION_NOTIFICATIONS_DISABLEDtrue
WEBHOOK_URLhttps://<render-subdomain>.onrender.com
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONStrue

After saving the new variables, trigger a redeploy or hit Manual Deploy ➜ Clear build cache & deploy in Render.

Step 5: Validate n8n

  1. Visit your Render URL and log into n8n.
  2. Open a workflow, execute a node, and confirm results appear.
  3. Restart the Render service once to ensure data persists across restarts.

Step 6: (Optional) Remove Supabase

Once you’re confident your Neon setup is stable:

Troubleshooting tips

What’s next

Neon gives you branching, point-in-time restore, and autoscaling. Experiment with development branches for testing risky automations, or take advantage of Neon’s CLI for CI/CD migrations while Render continues hosting your n8n instance.