Default database / maximum optionality
Start with Postgres
When you are building a system from scratch, Postgres should probably be the default starting point. Not because it solves everything. Because it solves a surprising amount before you need another moving part.
The argument
Most systems do not fail because Postgres was not powerful enough.
They fail because the architecture became distributed before the product needed it. Use Postgres deeply, push it until you have real evidence, then add specialized infrastructure with a reason.
Moving parts avoided
Route the first version through Postgres.
Pick the system you were about to add. The console shows the Postgres-first move, when it is reasonable, and where to go deeper.
Kafka -> pgmq
Start with a durable queue inside Postgres when you need simple jobs, events, and retries before a streaming platform.
Open comparisonComparisons
Instead of a zoo, start with a toolkit.
Strong defaults, real caveats, and graduation signals for the moment Postgres stops being the right shape.
Use pgmq for simple durable jobs and event handoff before you bring in a streaming platform.
Instead of MongoDB JSONBUse JSONB when part of your data is still changing but the rest still wants SQL, joins, and constraints.
Instead of Time-series DB TimescaleDBUse TimescaleDB when time-based data still belongs near your product data and SQL is enough.
Instead of Vector DB pgvectorUse pgvector for early semantic search when the search still needs product data, filters, and permissions.
Instead of Geospatial DB PostGISUse PostGIS for nearby search, boundaries, and location queries while the data still belongs with the product.
Instead of Cron service pg_cronUse pg_cron for recurring SQL jobs before you add a separate scheduler.
Setup guides
Enough detail to try it this week.
Small, practical walkthroughs for trying the Postgres-first move without turning the site into a book.
Store flexible fields in JSONB while keeping important columns, indexes, and constraints normal.
pgmq Set up a durable queue with pgmqCreate a Postgres-backed queue for small jobs, retries, and simple event handoff.
pgvector Add semantic search with pgvectorStore embeddings beside source records so search can use normal filters and permissions.
PostGIS Run nearby search with PostGISUse geography points and GiST indexes for practical nearby search inside Postgres.