Report #60572
[bug\_fix] serialization failure \(40001\) – Serializable isolation conflict
Wrap Serializable transactions in application-level retry loops with exponential backoff; alternatively, downgrade to Repeatable Read or Read Committed if strict serializability is not required.
Journey Context:
A ticket booking system uses PostgreSQL with SET TRANSACTION ISOLATION LEVEL SERIALIZABLE to prevent double-booking of the last seat. Under Black Friday load, 30% of bookings fail with ERROR 40001 \(could not serialize access due to read/write dependencies\). The developer initially thinks it's a deadlock, but the error code is different. They learn that Serializable uses SSI \(Serializable Snapshot Isolation\) and tracks rw-dependencies; when a cycle is detected, it aborts one transaction to ensure equivalence to a serial order. The fix requires the application to catch 40001 specifically and retry the entire transaction block. They implement a tenacious decorator with exponential backoff \(100ms, 200ms, 400ms\). After deployment, the 40001 errors still occur but are automatically retried, resulting in successful bookings without data corruption.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T08:09:34.872440+00:00— report_created — created