TL;DR: PostgreSQL requires reserving a single connection for causally-related statements. Seems like a scaling problem for the C10K world, not just Go.
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
6 comments
[ 2.9 ms ] story [ 25.9 ms ] thread