After burning through $60k in database bills across different companies, I've learned that pricing pages are marketing bullshit. Those pretty calculators? They're designed to lowball you into thinking databases are cheap.
Here's what actually happens when your app gets real traffic and these providers start charging for everything that moves.
PostgreSQL: The Predictable Performer
AWS RDS for PostgreSQL costs me around $35-40/month for basic setups once you factor in storage. Could be $45/month? I haven't checked this month's bill. Everyone quotes "$12/month" from calculator screenshots, but that's complete horseshit. Reality check: AWS RDS starts you off cheap then bleeds you dry with add-ons.
Want high availability? They double your bill. Need decent storage? That's extra. Performance Insights? More money. I watched one startup's "budget" PostgreSQL balloon from $30/month to $180/month because nobody read the fine print about Multi-AZ deployments.
Google Cloud SQL plays the same game with their f1-micro instances. Sure, it's $15/month until you realize 0.6GB RAM can't handle a WordPress blog. Scale up to something usable and you're paying $50+/month. Their storage costs more than AWS too, which hurts when you've got 200GB of data.
Supabase charges $25/month for PostgreSQL plus all the auth and real-time stuff you'd normally cobble together from 5 different services. Worth it? Depends if you hate writing boilerplate as much as I do.
MySQL: The Enterprise Split
MySQL hosting splits into two worlds: the cheap stuff that works until it doesn't, and the expensive stuff that actually works. Basic MySQL hosting costs about the same as PostgreSQL - around $15-20/month to get started across AWS, Google Cloud, and Azure.
AWS Aurora MySQL costs $60+/month but at least includes high availability instead of charging extra for it. Regular RDS MySQL doubles your bill for Multi-AZ. Aurora says "fuck that" and builds HA into the base price.
PlanetScale starts at $39/month with no free tier. Steep? Yeah. Worth it? Absolutely. Database branching means I can test schema changes without panic attacks. Zero-downtime migrations actually work - no more 2 AM deployments when nobody's watching. I've shipped 15 schema changes this month and slept through every single one. Last week I accidentally deployed a migration that dropped an index. With traditional MySQL, that would've been a 3-hour outage. With PlanetScale? Rolled back in 30 seconds.
Oracle's MySQL HeatWave claims cheaper pricing than AWS but requires selling your soul to Oracle Cloud. Pass.
MongoDB: The Premium Tax
MongoDB Atlas pulls the classic bait-and-switch. Start at $9/month they say. What they don't mention is that the $9 tier is about as useful as a chocolate teapot for anything beyond a hello world app.
Their M2 "production ready" tier is a joke. Shared CPU means your queries timeout randomly. Connection limits choke at 50 users. Performance metrics? Good luck - they don't show you what's breaking. I watched our app work perfectly in dev on M2, then shit the bed on launch day. The connection pool maxed out at 47 concurrent users. Our login system started throwing "MongoNetworkTimeoutError: connection timed out" errors, password resets failed, and I spent 4 hours debugging what I thought was a connection leak in our Express.js middleware. Turns out MongoDB M2 caps you at 50 connections total. Not 50 per process - 50 fucking connections across your entire app. Classic MongoDB bait-and-switch forcing an upgrade to M10 at $60/month.
AWS DocumentDB looks cheaper at around $30/month, but it's "MongoDB-compatible" like a knockoff iPhone is "Apple-compatible." Our aggregation queries that worked fine in Atlas? Half failed in DocumentDB. The $group operator worked differently, $lookup had weird limitations, and our analytics pipeline threw random errors. Burned two weeks debugging and rewriting queries before giving up and paying the MongoDB tax.
Azure Cosmos DB uses this weird Request Unit pricing that starts at $24/month for 400 RU/s. Problem? Any real app needs 2000+ RU/s, so you're looking at $300+/month before storage costs.
So those are the base database costs - the numbers they actually show you upfront. But here's where it gets expensive: the costs they don't mention until your bill arrives.
The Costs Nobody Mentions Until You're Fucked
Data Transfer: The Bill That Comes Out of Nowhere
Every cloud provider charges you to move your own data around. AWS hits you with $0.09-0.15/GB, Google Cloud similar, Azure slightly cheaper. DigitalOcean gives you 1TB free then $0.01/GB. Supabase includes 250GB.
We hit the front page of Hacker News once. Served 2TB of data in maybe 18 hours? Could have been 20, I was too busy putting out fires. AWS slapped us with a $270 data transfer bill the next day. Our $80/month database became $350 overnight because nobody mentioned data egress costs. That was back in March, I think? Still hurts.
Backup Costs: Because Losing Data Sucks
MongoDB Atlas charges extra for backups - around $25-30/month for a 500GB database. AWS RDS gives you free backups up to your database size, then starts charging. Google Cloud SQL includes 7 backups, then charges $0.08/GB monthly. PlanetScale includes backups in every plan.
High Availability: The "Double Your Bill" Tax
Want your database to stay up when shit breaks? Most providers charge double. AWS RDS Multi-AZ literally doubles your instance cost. Google Cloud SQL does the same plus extra storage charges. Azure is slightly better at 1.5x-2x depending on which tier you pick.
Aurora and PlanetScale are the exceptions - they include HA in their base pricing instead of extorting you for it. Aurora's $60/month made me wince initially, but it includes everything. PlanetScale at $39/month seemed steep until I realized I haven't been woken up by database failures in 6 months. My sleep schedule alone makes it worth the premium.
After getting hammered by these managed service fees, you start wondering: "What if I just run my own database?" Here's why that's usually a terrible idea, but sometimes works.
Self-Hosting: When Saving Money Costs Your Sanity
DigitalOcean droplet for $40/month looked like a steal compared to $200/month managed services. Until our database crashed at 3 AM on a Saturday and I was debugging corrupted indexes instead of sleeping. Was it 3 AM? Maybe 4? Either way, not fun.
Security patches? Miss one PostgreSQL update and wake up to SQL injection attempts. Backup scripts? Mine failed silently for 2 months before I noticed - or was it 3? Who's counting when your backups are broken. Performance problems? "Why are queries slow?" becomes a weekend-long EXPLAIN ANALYZE nightmare where you question all your life choices.
Self-hosting works if you have a proper DBA on staff who enjoys tuning shared_buffers and effective_cache_size at midnight for fun. Or if your app is so boring that traffic never spikes beyond 20 concurrent connections. For everyone else, paying $200/month beats paying yourself $150/hour to figure out why EXPLAIN ANALYZE shows a seq scan when you swore you had that index.
Okay, so managed services it is. But here's one more cost variable nobody talks about: where you put your database affects your bill more than you'd expect.
Regional Pricing: Same Service, Different Bill
AWS charges different amounts depending on where your database lives. US East (Virginia) is cheapest - around $100/month for a decent PostgreSQL instance. Or was it $110? I should probably check my bills more carefully. Same hardware in Singapore? $135/month, maybe more now. Google Cloud SQL plays similar games with 5-20% price differences between regions.
If you can handle higher latency, stick your database in US East and save $30-40/month. Your European users might notice the extra 100ms, but your wallet will appreciate the savings.
Now that we've covered the obvious and hidden costs, let me break down what these databases actually cost when you factor in all the real-world expenses nobody mentions in their marketing materials.
What Database Hosting Really Costs (Including the Stuff They Don't Tell You)
Dev/Staging Environments: The Bill Multiplier
Managed services charge full price for dev and staging databases. Our $80/month prod database became $240/month once we added dev and staging. Self-hosted lets you run 5 databases on one $80 server, but then you're managing 5 databases and getting paged when any of them breaks. I learned this the hard way after my 3rd weekend spent debugging staging env issues.
Monitoring: Because Flying Blind Sucks
DataDog database monitoring costs $15/host/month. New Relic is $100+/month for decent coverage. Basic monitoring comes with managed services, but "your database is slow" alerts aren't helpful when you need to know why. I spent 3 weeks tracking down slow queries that turned out to be missing indexes on a JOIN table. DataDog would've caught it in 3 minutes.
Migration Hell
"Let's switch from MongoDB to PostgreSQL" - famous last words from a standup meeting 8 months ago. Our 500GB database took 14 hours to export, maybe 16? I stopped checking. Half our ORM queries broke. That JSON column I said I'd fix later? It's now blocking a 6-month migration project. Budget 40 hours of work? Try 200 hours plus therapy costs.
The Bottom Line
PostgreSQL gives you predictable costs - expensive, but at least you know what you're paying for. MySQL can scale cheaper if you pick the right provider (Aurora, PlanetScale). MongoDB? You're paying a premium for document storage, which is fine if flexible schemas matter more to you than your budget.
These numbers are from September 2024. AWS already announced another price hike for Q1 2025 because apparently getting bent over once a year isn't enough. Nothing like getting a "15% price increase" email while you're debugging a production outage at 2 AM on a Saturday.