- Postgres is probably already running (it's pretty good for OLTP workloads)
- Operational ease and robustness
- Cloud support everywhere for Postgres
- People know how to backup and restore postgres
- Sometimes Postgres will beat or wholly subsume your specialized system and be a good choice
- Postgres has ACID compliance and a very good production-ready grasp on the research level problems involved in transactions. I've never met an etcd/zookeeper cluster I didn't wish was simply a postgres table. Image being able to actually change your cache and your data at the same time and ensure that both changes happen or none of them happen (this is a bit vaporware-y, because locks and access pattern discrepancies and stuff but bear with me). You're much more unlikely to see Postgres fail a Jepsen test[0]
[0]: https://jepsen.io
- storing relational data (duh)
- storing JSON documents with Postgres' JSONB support - it really is very good, and being able to query relational and document data in the same query is wonderful
- storing key/value type data, where I only need to store a small amount of such data - seems silly to spin up Redis for such a small requirement
- time-series data - TimescaleDB is amazing. Performance may not be on par with a highly tuned schema with a purpose-built time series database, but it's still very, very good. It's fast even with billions of rows, has data compression, and it's really nice to be able to be able to query it just like any other Postgres tables. And the TimescaleDB folks are really helpful on Slack and GitHub. I'm a huge fan of TimescaleDB, and think it's more than adequate for a lot of time-series use cases
- full text search - Postgres shines here too! It's not as powerful as the likes of Elasticsearch, but it's still very good, and very fast. And Elasticsearch is not trivial or cheap to setup and maintain
For queues and pub/sub, RabbitMQ is my go-to solution.