PostgreSQL-Fehler: duplicate key value violates unique constraint

ERROR:  duplicate key value violates unique constraint "users_email_key"
DETAIL:  Key (email)=([email protected]) already exists.

Ein INSERT oder UPDATE hat versucht, eine zweite Zeile mit demselben Wert in einer Spalte (oder Spaltenmenge) zu erzeugen, die von einem Unique-Constraint oder Unique-Index abgedeckt ist. Die DETAIL-Zeile sagt Ihnen genau, welcher Constraint und welcher Wert — dort beginnt die Diagnose.

Was dieser Fehler bedeutet

Der Constraint hat funktioniert: PostgreSQL garantiert Eindeutigkeit auch unter Nebenläufigkeit, und dieser Fehler ist diese Garantie in Aktion. Zwei Dinge sind über das Offensichtliche hinaus wissenswert:

Häufige Ursachen

So diagnostizieren Sie ihn

-- Welcher Constraint, welche Spalten:
\d users

-- Verdacht "Sequenz zurückgeblieben" (Fehler auf der _pkey mit seriellen IDs):
SELECT max(id) FROM users;
SELECT last_value FROM users_id_seq;
-- wenn last_value <= max(id), ist dies die Ursache

Wenn der Constraint auf einem Geschäftsschlüssel (E-Mail, SKU, …) statt auf dem Primärschlüssel liegt, schauen Sie, woher der Wert in DETAIL kommt: derselbe Benutzer, der doppelt absendet, Retry-Logik oder zwei Codepfade, die dieselbe Entität erzeugen.

So beheben Sie ihn

🔍 Weiterführend: Den richtigen Index wählen — Unique-, Partial- und Ausdrucksindizes und was sie beim Schreiben kosten.