Voltro + Render
Run Voltro on Render with managed Postgres — internal vs external connection strings, sslmode, full LISTEN/NOTIFY reactivity, and connection limits per plan.
Render offers managed Postgres, mapping to Voltro's postgres dialect with the full reactive surface — LISTEN/NOTIFY CDC, advisory-lock cluster workflows, read replicas, JSONB. Render runs a plain Postgres instance with no transaction pooler in front, so there's no LISTEN/NOTIFY caveat.
Connect
Render gives you two connection strings: an internal one (only reachable from other Render services in the same region) and an external one (reachable from anywhere). Prefer internal for service-to-database traffic — it skips public egress and is lower latency.
# Internal connection (recommended for Render-hosted services)
DB_DIALECT=postgres
DB_URL=postgresql://[USER]:[PASSWORD]@[HOST]-a/[DB]# External connection (from outside Render, e.g. local dev / CI)
DB_DIALECT=postgres
DB_URL=postgresql://[USER]:[PASSWORD]@[HOST]-a.[REGION]-postgres.render.com/[DB]?sslmode=requireEnabling CDC
Voltro's change-data-capture is LISTEN/NOTIFY, on by default (CDC=1) — no extension, no flag. Render runs a plain Postgres instance with no transaction pooler in front, so whichever connection string you map to DB_URL (internal or external) is session-mode and reactivity works immediately. If you later add a pgbouncer to scale connections, keep it in session mode or pin the single CDC listener to a direct connection so LISTEN/NOTIFY survives.
Pooling / SSL
- No pooler by default — Postgres reactivity works directly, no config needed for
LISTEN/NOTIFY. - SSL: the external URL requires
sslmode=require. The internal URL runs over Render's private network and doesn't. - Connection limits: each plan caps
max_connections(low on the starter tiers). Add apgbouncer(in session mode) if you outgrow the cap — keep the single CDC listener on a direct connection if you do. (The framework opens one pool per process; cap its size per process withDB_MAX_CONNECTIONS— maps to the postgresmax, mysqlconnectionLimit, and mssqlpool.max.)
Verify
[voltro:dev] sql dialect resolved: postgres — CDC: LISTEN/NOTIFY, RETURNING: native
[voltro:dev] read replicas: 0 configured (DB_REPLICA_URLS empty) — all queries → primary
[voltro:dev] workflow engine: cluster-sql, dialect=postgresConfirm with voltro logs --tail 50.
See also
- Postgres dialect — LISTEN/NOTIFY internals, workflows, read replicas, JSONB.