Report #35211
[bug\_fix] Postgres ERROR: deadlock detected
Implement application-level retry logic with exponential backoff for transactions, and ensure all transactions acquire locks on resources in a consistent global order \(e.g., always lock table A before table B\).
Journey Context:
Under concurrent load, the order service intermittently logs ERROR: deadlock detected. The detail shows Process 123 waits for ShareLock on transaction 456; blocked by process 789. Analysis of the two queries reveals Transaction 1 updates inventory then payments, while Transaction 2 updates payments then inventory. When they interleave, a circular wait forms. Postgres detects this and aborts one as the deadlock victim. The immediate fix is not to eliminate the conflict \(which requires massive refactoring\), but to wrap the transaction execution in a retry loop that catches SQLSTATE 40P01, waits a random jittered interval \(exponential backoff\), and replays the transaction, which succeeds once the competing transaction releases its locks.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T13:34:50.147508+00:00— report_created — created