PostgreSQL-Fehler: could not serialize access

ERROR:  could not serialize access due to concurrent update

-- oppure, a livello Serializable:
ERROR:  could not serialize access due to read/write dependencies among transactions
DETAIL:  Reason code: Canceled on identification as a pivot, during commit attempt.
HINT:  The transaction might succeed if retried.

Dieser Fehler existiert nur auf den Isolationsebenen Repeatable Read und Serializable, und es sind diese Ebenen, die wie vorgesehen arbeiten: PostgreSQL konnte kein Ergebnis erzeugen, das mit den von Ihnen geforderten Garantien konsistent ist, und hat daher Ihre Transaktion abgebrochen, statt stillschweigend etwas Falsches zurückzugeben.

Was dieser Fehler bedeutet

Die beiden Varianten entsprechen den beiden Ebenen:

In jedem Fall wurde die Transaktion zurückgerollt und würde, wie der HINT sagt, wahrscheinlich erfolgreich sein, wenn man sie einfach erneut ausführt. SQLSTATE ist in beiden Fällen 40001.

Häufige Ursachen

So diagnostizieren Sie ihn

So beheben Sie ihn

🔍 Weiterführend: Transaktions-Isolationsebenen in der Praxis — was jede Ebene garantiert, Write Skew und ein ganzer Abschnitt zum korrekten Wiederholen.