ну давайте рассмотрим Postgres, это сервис, у него есть определённый API, доступный по его собственному бинарному протоколу поверх TCP
в чём проблема этого протокола? он connection-based
держать много соединений проблематично для большинства используемых версий серверных ОС, поэтому создать по соединению на запрос чревато, но сам протокол устроен так, что вы получаете ответы на запросы строго в том же порядке, в котором отправляете. Т.е. если соединения забиты тяжёлыми запросами, быстрый никак не может сделать шорт-кат, и должен ждать, пока они завершатся.
Такой протокол очень не располагает к асинхронной разработке, даже если вы используете какой-то драйвер асинхронный вплоть до IO, вам приходится использовать обычные костыли вроде пулов соединений и в определённой степени жертвовать возможностями конкаренси, чтобы с работать с такой СУБД