Case study 01 ยท Managed PostgreSQL

The RDS bill said $493 a month.

The same stack now runs at $335.

A 14-person logistics SaaS was paying about $493 a month for PostgreSQL on AWS RDS: a Multi-AZ production instance, a staging instance, RDS Proxy, backups, monitoring. We rebuilt it shape for shape on Selfhost.dev managed PostgreSQL, same region, Multi-AZ to Multi-AZ and the bill came to about $335. Here is every line item on both sides.

us-east-1, both sides /Multi-AZ to Multi-AZ /August 2026 rates
~$493
RDS bill before, per month
~$335
same stack after, per month
32%
lower on day one
36%
with staging on a weekday schedule
The client
Team
14 people, 3 backend engineers, no DBA
Product
B2B logistics SaaS
Region
US, everything in us-east-1
Database
PostgreSQL 16, ~300 GB, steady OLTP load
Trigger
Three straight months of bill growth with flat traffic

Client details are anonymized and normalized. Every price below is recomputed at public list rates and our own billed rates for August 2026, in the region named on each table, so you can check the math yourself.

Why they moved

Nobody chose this bill.
It accreted.

The stack was textbook: one Multi-AZ PostgreSQL instance for production, one smaller instance for staging, RDS Proxy in front because a connection spike once took the app down, automated backups with two weeks of retention. Each decision was right. Each added a meter.

What made the team look again was not any single line. It was that the database bill kept creeping while traffic stayed flat and nobody could say which line would creep next. Three of the seven lines on the bill were for things they assumed came with a managed database: connection pooling, monitoring, backup storage.

The before table

What AWS RDS was charging,
line by line.

AWS RDS for PostgreSQL ยท us-east-1 ยท on-demand list rates

Item Detail $ / mo
Production instance db.r6g.large, 2 vCPU / 16 GB, Multi-AZ, $0.450/hr $328.50
Production storage 300 GB gp3 at $0.115/GB, doubled under Multi-AZ $69.00
RDS Proxy Connection pooling, 2 vCPU minimum at $0.015/vCPU-hr $21.90
Backup storage ~150 GB beyond the free allowance at $0.095/GB $14.25
Staging instance db.t4g.medium, 2 vCPU / 4 GB, Single-AZ, 24/7 at $0.065/hr $47.45
Staging storage 50 GB gp3 at $0.115/GB $5.75
Monitoring CloudWatch and enhanced monitoring, 2 instances $6.00
Total about $493 every month $492.85

AWS RDS for PostgreSQL, us-east-1, on-demand list rates, checked August 2026: db.r6g.large Multi-AZ $0.450/hr, db.t4g.medium $0.065/hr, gp3 storage $0.115/GB/mo (billed on both nodes under Multi-AZ), backup storage $0.095/GB/mo beyond the free allowance, RDS Proxy $0.015 per vCPU-hour with a 2 vCPU minimum, CloudWatch about $3 per instance.

Months are 730 hours. Figures in USD.

The diagnosis

What was actually
driving the bill.

Multi-AZ doubles a premium

Multi-AZ is the right call for production, but it doubles whatever rate you are already paying. RDS carries a steep managed premium over the underlying compute, so doubling it hurts twice. Selfhost.dev charges the AWS base rate plus a flat 35 percent and Multi-AZ doubles that smaller number instead.

The meter never stopped

Staging ran 730 hours a month to be used for maybe 45 of them. On-demand RDS has no cheap way to park it. Hourly credit billing does: a scheduled start-stop turns staging into a weekday-hours line item without anyone remembering to flip a switch.

Paying extra to get to baseline

RDS Proxy, backup storage past the allowance and monitoring added about $42 a month, roughly 9 percent of the bill, for capabilities the team considered table stakes. On Selfhost.dev, PgBouncer pooling, metrics, alerts and PITR are part of the instance, with backup storage metered at $0.05/GB.

The migration

The move,
as it actually went.

Migrations are free and white-glove on Selfhost.dev: an engineer plans and runs the move with you, whatever the size. This one followed the standard PostgreSQL path.

1

Audit and shape-match

We started from the bill above, not from a sales sheet. The production instance mapped to an r7g.large (2 vCPU / 16 GB, one Graviton generation newer than RDS r6g), Multi-AZ with a synchronous standby. Staging mapped to a t4g.medium. Region stayed us-east-1, next to the app servers.

2

Logical replication, tested restore, then cutover

The data moved over logical replication while production stayed live and we ran a full restore test against the new instance before anyone flipped a connection string. Cutover was a connection swap with the app pointed at the new pooled endpoint.

3

Retire the add-on meters

RDS Proxy was replaced by the included PgBouncer pooling on port 6432. CloudWatch dashboards were replaced by built-in metrics and email and Slack alert rules. Staging went onto a weekday start-stop schedule and the whole setup is drivable from the editor over MCP.

The after table

The same stack on Selfhost.dev,
line by line.

Selfhost.dev managed PostgreSQL ยท us-east-1 ยท all-in billed rates, August 2026

Item Detail $ / mo
Production instance r7g.large, 2 vCPU / 16 GB Graviton3, Multi-AZ (primary + synchronous standby) $211.09
Production storage 300 GB gp3 at $0.08/GB base, on both nodes $64.80
Connection pooling PgBouncer included, transaction / session / statement modes $0.00
Monitoring and alerts Live metrics, email and Slack alert rules, included $0.00
PITR WAL archive ~100 GB at $0.03/GB $3.00
Backup snapshots ~150 GB at $0.05/GB $7.50
Staging instance t4g.medium + 50 GB gp3, 24/7 (before scheduling) $38.51
Public IPv4 Added at deploy, both instances $9.86
Total about $335 every month $334.76

Selfhost.dev prices are our all-in billed us-east-1 rates as of August 2026, the same numbers the pricing calculator shows.

PITR, automated backups, PgBouncer pooling, Multi-AZ failover, metrics, alerts and database users are included with managed PostgreSQL. Backup snapshot storage bills at $0.05/GB/mo and PITR WAL at $0.03/GB/mo.

Every managed instance gets a public IPv4 at deploy, about $5/mo, itemized above. Billing is hourly against prepaid credits.

$492.85 before / mo
$334.76 after / mo
$158 /mo saved, 32% less

That is about $1,900 a year back, before touching staging hours.

Putting staging on a weekday schedule (about 264 hours a month instead of 730) drops the total to about $314, a 36 percent cut worth roughly $2,150 a year.

Read before you copy this

Where this math
bends the other way.

Reserved Instances close part of this

A 1-year RI trims the RDS instance rate by roughly a third in exchange for a commitment. It does not touch Proxy, backup storage, monitoring or a staging box running nights and weekends and it locks the shape for a year. We compare against on-demand because that is what this team, like most small teams without a DBA, was actually paying.

Egress and the endpoint

The app reaches the database over its public endpoint with IP whitelisting; result-set traffic bills at $0.15/GB. A CRUD workload moving tens of GB a month adds five to fifteen dollars, which is inside the rounding above but belongs on the table.

Where RDS still wins

If you need Aurora-style storage autoscaling to tens of TB, cross-region read replicas from a console or a compliance package on paper, RDS is the deeper platform. This stack needed none of those.

Want this table for your own bill?

Two clicks get you our verified numbers for your shape. Add your setup and a founder replies personally, usually within about two working days, with the same line-by-line format you just read.

cost check

Methodology

  • AWS rates are public on-demand list prices for us-east-1 from the AWS RDS pricing page, checked August 2026 and quoted per line above.

  • Selfhost.dev rates are our all-in billed rates, reproducible in the pricing calculator. Both stacks are priced at 730 hours a month, in USD.

  • Comparison is deliberately strict: Multi-AZ against Multi-AZ, same region, same storage class. Smaller stacks tend to see a larger percentage gap; see the full RDS comparison for three worked sizes.

Frequently asked questions

Would Reserved Instances have closed the gap?
Partly, on one line. A 1-year no-upfront RI cuts the RDS instance rate by roughly a third in exchange for a 12-month commitment and does nothing for Proxy, backup storage, monitoring or staging hours. This stack saved across every line and hourly billing means staging simply stops when nobody is using it, no commitment required.
Is the hardware actually comparable?
Same class on both sides: memory-optimized Graviton, 2 vCPU and 16 GB, Multi-AZ, gp3 storage. RDS r6g instances run Graviton2; Selfhost.dev provisions r7g, one generation newer. See measured throughput on the benchmarks page.
What does the migration involve?
An engineer plans and runs it with you, free, on any size. For PostgreSQL that means logical replication while your current database stays live, a tested restore before cutover, then a connection swap. Start with a free cost audit of your actual bill. Request a free infrastructure cost audit.
What is included in the Selfhost.dev price and what is metered?
Included: PITR, automated backups, PgBouncer pooling, Multi-AZ with synchronous failover, live metrics, alert rules and database users. Metered: backup snapshot storage at $0.05/GB/mo, PITR WAL at $0.03/GB/mo, egress at $0.15/GB and a public IPv4 at about $5/mo per instance, added at deploy. Pricing is the AWS base rate plus a flat 35 percent, shown in the calculator. Open the pricing calculator.
In short

In short: a 14-person SaaS moved PostgreSQL from AWS RDS to Selfhost.dev managed PostgreSQL in us-east-1, Multi-AZ to Multi-AZ and the monthly database bill went from about $493 to about $335, a 32 percent reduction at list rates, reaching 36 percent once staging ran on a weekday schedule. Connection pooling, monitoring, alerts and PITR moved from paid add-ons to included features and every number is reproducible from public price sheets dated August 2026.

Run this audit on your own bill.

$5 welcome credit, no card needed
Free white-glove migration
Billed hourly, pause at zero