Railway shipped one-click highly available Postgres in March 2026 — and in the same breath told you not to trust it with production data. "This is experimental and not production-ready," the changelog reads. "Don't upgrade a production database to an HA cluster yet."
That single warning is the most honest sentence written about managed Postgres on the Heroku-alternative platforms this year. Six months later, with Heroku in sustaining-engineering mode and thousands of teams planning their exit, the question is simple: which of Railway, Render, or Fly.io actually gives you a production-grade database in 2026? The answer is a scoreboard with exactly one clear winner — and a cost table that surprises people in both directions.
The scoreboard, up front
Here is the like-for-like gap analysis. Four columns, six rows, no marketing copy:
| Capability | Railway (default) | Railway HA (one-click) | Render Postgres | Fly Postgres |
|---|---|---|---|---|
| Point-in-time recovery (PITR) | No | No stated PITR story | Yes, all paid plans | No (daily snapshots, 5-day retention) |
| Automated failover | No (single node) | Yes (Patroni + etcd) | Yes, on HA-enabled tiers | Operator-owned (you run it) |
| Read replicas | No | No (replicas exist for failover, not reads) | Yes, on larger tiers | Manual / DIY |
| Automated backups | Volume snapshots only | Same, plus cluster monitoring UI | Yes, automated + on-demand exports | Daily volume snapshots |
| Encryption at rest | Platform volumes | Platform volumes | AES-256, primaries + replicas + backups | Platform volumes |
| Connection pooling | No built-in pooler | No built-in pooler | Built-in pooling docs + guidance | DIY (pgBouncer you deploy) |
Two things jump out. First, Render is the only column without a "no" in it. Second, Railway's HA upgrade fixes exactly one row — failover — while leaving PITR, the capability that decides whether a 2 AM incident costs you minutes or a full day of data, unaddressed.
Railway: failover yes, PITR nowhere
Credit where it is due: Railway's HA architecture is the real thing. One click provisions Postgres replicas managed by Patroni, an HAProxy layer routing traffic to the current primary, and an etcd cluster for leader election, plus a dedicated UI showing cluster health, replica status, and the current primary. If the primary fails, a replica is promoted and traffic reroutes automatically. That is precisely the stack a competent platform team would assemble by hand.
The timeline matters, though. HA Postgres landed in Priority Boarding on March 13, 2026 carrying the explicit not-production-ready label, then opened to all users on March 27. Going from gated to generally available in two weeks is fast for a feature whose failure mode is silent data loss — and Railway never attached a PITR story, a backup-retention policy, or a production SLA to the announcement. As July 2026's independent three-way comparison put it: Railway itself labels it experimental and says not to run production databases on it, so treat Railway as best for fast iteration "until that graduates out of experimental status."
Meanwhile the default is unchanged: a single containerized node with no PITR and no read replicas. Any node failure takes your database offline, and your recovery granularity is your last snapshot. For side projects and prototypes that is perfectly fine. For customer data, the absence of any production-ready PITR option on the platform is the single biggest risk in this comparison.
One more cost subtlety: Railway bills usage-based, and an HA cluster is several always-on containers (replicas plus etcd plus proxy) where one used to be. There is no published flat price for the HA add-on — you pay the metered cost of every container in the cluster. Failover stops being free the moment it stops being a single node.
Render: the only column that clears the bar
Render's managed Postgres is the strongest database story of the three by a distance. The facts, from Render's own docs:
- PITR on every paid instance — "All paid Render Postgres databases provide point-in-time recovery," plus on-demand logical exports.
- Read replicas and high availability on larger instances, with dedicated HA and read-replica tiers.
- AES-256 encryption at rest covering primaries, replicas, and backups alike.
- Storage autoscaling: hit 90% full and Render grows the disk 50% automatically, so the classic "database fell over because the disk filled" page never fires.
Pricing runs on flexible plans: compute from roughly $6/month on the Basic tier, with storage billed separately at about $0.30/GB/month. Worked to a single monthly number:
- A typical ~20 GB database: ~$6 compute + ~$6 storage = ~$12/month.
- A larger ~100 GB database: ~$6 compute + ~$30 storage = ~$36/month on Basic compute.
Two honest caveats. First, those totals assume Basic compute; production workloads usually size up the compute tier, and a read replica roughly doubles the compute line. Second, storage only grows — Render lets you scale disk up to 16 TB but never back down, so an oversized disk is a permanent line item. Even with those caveats, this is the only platform of the three where the database line item buys you PITR, replicas, and encrypted automated backups instead of just a container with Postgres in it.
Fly.io: honestly, deliberately unmanaged
Fly.io deserves credit for the opposite virtue: it tells you exactly what you are getting. Its docs page is literally titled "This Is Not Managed Postgres." Fly Postgres is a regular Fly app with an automated creation process — fly pg provisioning helpers, daily volume snapshots kept for five days, Firecracker VMs on a WireGuard network, and Prometheus metrics you wire into your own Grafana. "If Postgres crashes because it ran out of memory or disk space, you'll need to do a little work to get it back."
There is no PITR, no managed failover-as-a-service, no read-replica product. Replication exists (you can run multiple nodes), but operating it — failover drills, split-brain avoidance, replica lag monitoring — is your job, on call, at 2 AM. The experienced-Fly-user pattern, documented across every 2026 comparison, is to pair Fly compute with an external managed database: Neon, Supabase, or similar.
What does that pattern cost on the same inputs as the Render math above? Neon bills usage-based: about $0.106 per compute-unit-hour and $0.35/GB-month for storage, with no fixed base on Launch. That works out to roughly $7/month in storage for 20 GB and $35/month for 100 GB, plus compute for active hours.
Third-party estimates put a typical always-on production setup in the ~$40–80/month range. A bursty side project that scales to zero pays far less; an always-on production primary pays for every hour. Either way, you are paying a second vendor because the platform's own database is explicitly not a managed service. Budget for it from day one instead of discovering it during your first incident.
Like-for-like monthly totals
Summing the database layer to one number per platform, at the same two storage sizes (same small-compute assumption throughout; verify against live pricing — all three vendors repriced something in the last twelve months):
| Database layer | ~20 GB | ~100 GB | What the money buys |
|---|---|---|---|
| Render (Basic compute + storage) | ~$12/mo | ~$36/mo | PITR, automated backups, AES-256, autoscaling disk |
| Railway (usage-based, small always-on instance) | ~$20–25/mo | ~$35–40/mo | A container with Postgres; no PITR; HA multiplies containers |
| Fly + external managed DB | ~$40–80/mo typical | ~$60–120/mo typical | Fly machines + Neon/Supabase-class PITR, branching, pooling |
Read the table carefully, because the naive reading ("Render is cheapest") misses the point in both directions. Render is cheapest and the most managed — the rare case where the best product is also the lowest line item.
Railway looks inexpensive until you notice the money buys no PITR at any price; its HA add-on multiplies metered containers without adding a recovery story. And Fly's total looks highest because it is really two bills: Fly's machines plus a genuinely managed database from someone else. That second bill is what managed Postgres actually costs when it is itemized honestly.
The Heroku-migration mapping
Heroku's February 2026 move to sustaining engineering — no new features, no new enterprise contracts — turned "should we leave Heroku Postgres?" from a someday question into a planning item. If you are mapping Heroku features to a destination, here is where each one lands:
- Fork-at-timestamp / PITR restores: Render covers this natively on all paid plans. Railway has no equivalent. Fly has no equivalent (daily snapshots only); your external managed DB covers it instead.
- Follower databases (read replicas): Render on larger tiers. Railway: no read-replica product (HA replicas serve failover, not reads). Fly: DIY or via the external provider.
pgbackups-style automated backups: Render automated + on-demand exports. Railway: volume snapshots. Fly: daily volume snapshots, five-day retention.- Connection pooling / PgBouncer guidance: Render documents and supports it. Railway and Fly: bring your own pooler.
The industry has converged on the same graduation path, and Techsy's comparison states the trigger plainly: "If you find yourself needing PITR or read replicas, it's time for Render." Start on Railway while you iterate fast and the data is replaceable; move to Render when the data starts being the business; move to Fly when global latency dominates and you have already budgeted the external database.
What "bring your own database" must provide
This is the part self-hosting advocates — us included — have to say out loud. The moment you leave managed Postgres for machines you own, you inherit every row of the scoreboard above. Before a self-hosted target can honestly claim parity with Render's $12–36/month column, it must provide:
- WAL-archived backups with tested PITR — not just nightly dumps (those cap your loss at 24 hours), but continuous WAL archiving with a restore drill you have actually run this quarter.
- Automated failover with a runbook — Patroni or Stolon or a Postgres operator doing promotion, plus documented behavior for split-brain, failback, and the "primary is back but stale" case.
- Connection pooling — PgBouncer or equivalent in front of every production primary, because your app servers will open more connections than Postgres wants to hold.
- Encryption at rest and in transit — volume encryption plus enforced TLS, matching what Render ships by default.
- Backup monitoring and restore drills — a backup nobody has restored is a rumor. Alert on backup age and failure; restore to a scratch instance on a schedule.
None of this is exotic. Operators like CloudNativePG and Patroni-on-Kubernetes package most of it. But "most of it, packaged" is not "done": someone still owns the runbook, the drill calendar, and the 2 AM page. A self-hosted platform that answers all five rows above beats Render on control and data gravity; one that answers three of them is Railway's default tier with extra steps.
The verdict
Six months after Railway's HA launch, the managed-Postgres gap across the three Heroku heirs is narrower in exactly one dimension — automated failover — and unchanged everywhere else. Render remains the only platform where the database product includes PITR, replicas, and encrypted automated backups. Railway remains the fastest way to ship while your data is replaceable, with an HA feature to watch but not yet to trust. Fly.io remains the honest edge-compute play that expects you to bring a database from elsewhere.
Pick by stage, not by brand: prototype on Railway, run production data on Render, go global on Fly with an external managed database already in the budget. And if you self-host — on your own machines, where no vendor's database team is on call for you — hold yourself to the five-row checklist above before calling it production-grade.
Bex.co is the open-source, AI-native Render alternative — push a git repo, get a running HTTPS service on machines you own. Pair it with a Postgres operator that covers the checklist above, and the database stays yours in every sense. Star the repo on GitHub or deploy your first app today.



