RDS vs Self-Managed PostgreSQL: When to Use Each
The managed services debate never dies. RDS is more expensive than running PostgreSQL on EC2, but “just use RDS” ignores real trade-offs. Here’s a framework for making the right call.
The Core Trade-off
Running any database involves these operational tasks:
- OS patching and updates
- PostgreSQL version upgrades
- Backup creation and verification
- Point-in-time recovery testing
- Replication setup and monitoring
- High availability failover configuration
- Storage management and scaling
- Performance monitoring and tuning
Self-managed: You own all of this. Full control, full responsibility.
RDS: AWS handles most of it. You pay a premium for that — typically 30-50% more than equivalent EC2 compute.
The question isn’t “which is cheaper?” It’s “is your team’s time worth more than the price premium?”
When to Use RDS
You Don’t Have a Dedicated DBA
If your “DBA” is a developer who also writes features, uses RDS. The automation AWS provides — automated backups, Multi-AZ failover, minor version patching — prevents the class of incidents that happen when database maintenance is no one’s real job.
You Need PITR and Can’t Build It Yourself
Point-in-time recovery to any second in the last 35 days is table stakes for production databases. RDS gives you this automatically. Building an equivalent system with WAL archiving to S3 is doable but not trivial.
You’re Running Multi-AZ
RDS Multi-AZ provides synchronous replication with automatic failover in 60-120 seconds. Building this with Patroni and a custom load balancer on EC2 takes weeks and requires ongoing maintenance.
For most teams: the Multi-AZ setup alone justifies RDS pricing.
Your Database is Under 10TB
Above ~10TB, the RDS pricing premium becomes significant. Below that, the operational savings typically exceed the cost difference.
You Want Aurora
Aurora is RDS on steroids: 5x the write throughput of standard MySQL, distributed storage that auto-scales to 128TB, and Aurora Serverless v2 for spiky workloads. It’s only available as a managed service, so if you want it, RDS is your only option.
When to Self-Manage
You Need Database Versions RDS Doesn’t Support
RDS typically trails the latest PostgreSQL release by a few months. If you need Postgres 17 features immediately, self-managed is your only option.
You Have Unusual Performance Requirements
RDS storage is EBS — good, but not the best. For extremely I/O-intensive workloads, instance-attached NVMe SSDs on EC2 provide lower latency than EBS gp3.
You Have Specific Extensions Not Available in RDS
RDS restricts some PostgreSQL extensions for security reasons. If you need pg_cron at the system level, PostGIS with custom builds, or other restricted extensions, self-managed gives you full control.
Your Database is Very Large
Above 10-15TB with high transaction rates, the RDS pricing premium becomes material:
| Setup | Monthly Cost (example) |
|---|---|
| db.r6g.2xlarge RDS Multi-AZ | $1,200 |
| r6g.2xlarge EC2 + Patroni + EBS | $750 |
| Difference | $450/month |
At scale, $5,400/year can fund a significant amount of DBA time.
The In-Between: RDS Proxy and Parameter Groups
Before going fully self-managed, consider:
RDS Proxy: Eliminates connection pool exhaustion issues without moving to self-managed. Pays for itself in reduced Lambda-to-RDS connection limits.
Custom Parameter Groups: RDS supports most PostgreSQL configuration parameters. work_mem, shared_buffers, max_connections, wal_level — you have more control than people realize.
Read Replicas: RDS read replicas are trivially easy to create and cover most read-scaling needs.
Our Recommendation Framework
Does your team have a dedicated DBA?
├── No → Use RDS
└── Yes → Continue...
Do you need Multi-AZ HA?
├── Yes → Strong lean toward RDS
└── No → Continue...
Database size > 10TB?
├── No → Use RDS
└── Yes → Calculate cost premium...
Cost premium > team time cost?
├── No → Use RDS
└── Yes → Self-managed worth evaluating
For 90% of startups and mid-size companies: use RDS. The operational simplicity is worth the price premium, especially when you factor in the true cost of an incident at 3am.
For large databases (10TB+) or teams with dedicated DBAs who have specific requirements: self-managed PostgreSQL on EC2 with proper tooling (Patroni, pgBackRest, pgBadger) is entirely reasonable.
Practical Cost Comparison
For a typical production setup (2 vCPU, 8GB RAM, Multi-AZ):
| RDS | Self-Managed EC2 | |
|---|---|---|
| Compute | $200/mo (db.m6g.large Multi-AZ) | $90/mo (m6g.large x2) |
| Storage (500GB) | $115/mo (gp3) | $50/mo (gp3) |
| Backups (500GB) | $25/mo | $25/mo (your S3) |
| Monitoring | Included | $15/mo (CloudWatch) |
| Total | $340/mo | $180/mo |
That’s $1,920/year difference. Ask yourself: do you have 40 hours/year to spend on database operations? If not, RDS is cheaper when you account for your time.
Not sure which setup is right for your workload? Let’s talk — database architecture is one of our specialties.
MakFam Solutions
Cloud infrastructure and AI consultant with 6+ years of AWS expertise. Helping small and medium businesses build scalable, secure cloud systems.