6 comments

[ 2.9 ms ] story [ 25.9 ms ] thread
TL;DR: PostgreSQL requires reserving a single connection for causally-related statements. Seems like a scaling problem for the C10K world, not just Go.
I ran into this same issue with python/SQLAlchemy. It's a connection pool thing
Even more generally, pretty much any ACID database is gonna be a scaling problem for C10K.
Seems like if you tried to use transactions, you'd have the same problem?
A transaction executes all commands using the same connection so it would have worked. The semantics are different though where the commands issued between the lock and unlock aren't atomic if issued on the same connection but not in a tx.
For transactions You should use different advisory lock tied to transaction: pg_advisory_xact_lock. This should solve problem even for sessions reuse and connection pooling