PostgreSQL Is Enough
You probably do not need Redis, Elasticsearch, or a separate analytics database. PostgreSQL handles all of it, and it has for years.
There is a pattern in modern web development where every new requirement gets its own database. Need search? Add Elasticsearch. Need caching? Add Redis. Need analytics? Add ClickHouse. Need a job queue? Add RabbitMQ. Before you know it, your architecture diagram looks like a subway map.
PostgreSQL handles most of these use cases out of the box. Full-text search with tsvector and GIN indexes is fast enough for most applications. LISTEN/NOTIFY replaces simple pub/sub. Materialized views handle analytics queries. The SKIP LOCKED pattern gives you a reliable job queue without a separate broker.
I am not arguing against specialized databases when you genuinely need them. If you are doing millions of full-text searches per second, you need Elasticsearch. If you are running a global CDN cache, you need Redis at the edge. But most applications never hit those thresholds.
For the nSelf stack, PostgreSQL 16 is the only database. It stores application data, handles auth sessions, runs full-text search, and manages job scheduling. One database to back up, one database to monitor, one connection string to manage. Simplicity is a feature.