The 'pick a database' question shows up monthly. Most teams pick Postgres regardless and are usually right. Here's a quick decision tree for when you should reach for something else.

Advertisement

Default: Postgres

Relational data + ACID + read scale via replicas + extensions (pgvector, PostGIS, TimescaleDB) → Postgres. Don't deviate without specific need. Most reach-for-Mongo / reach-for-DynamoDB calls go away if you actually try Postgres first.

Reasons to deviate

Sub-10ms global reads, infinite write scale, accept per-query data model design: Cassandra/DynamoDB. Vector-only at >100M scale: Milvus/Pinecone. Time-series at high cardinality: TimescaleDB or InfluxDB. Search-first: Elastic/OpenSearch.

Advertisement

Anti-patterns

Choosing a database for one feature (use Postgres + an extension). Choosing because the org already uses it for a different workload (workloads have different fit). Picking the trendiest option (most don't pan out).

Postgres unless specific. Cassandra/DynamoDB for global scale. Vector DBs at very high vector counts only.