An alternative is to have a pooled driver that is friendly to async. My MongoDb driver does this: mongopool (on nimble).
Essentially, the connections to the database are pooled and used dynamically by the server threads. So no slow down at scale.
With postgresql and mysql this is not as pronounced as it is on MongoDb. On MongoDB an authenticated SCRAM connection can take 1 full second to form but the query is almost instantaneous. So having each thread start it's own connection is a very bad idea.
I think some of the Python drivers do both: pooled connections and async.
I checked out the listed drivers:
asyncpg has unfixed bugs and seems not supported.
treeform/pg the pool waiting has await sleep_async(100) (https://github.com/treeform/pg/blob/master/src/pg.nim#L75) maybe it would be worth to reduce it to like 10 or 1? It's better to burn CPU than to waste time being idle...