Error de PostgreSQL: duplicate key value violates unique constraint

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

Un INSERT o UPDATE intentó crear una segunda fila con el mismo valor en una columna (o conjunto de columnas) cubierta por una restricción unique o un índice único. La línea DETAIL te dice exactamente qué restricción y qué valor — el diagnóstico empieza ahí.

Qué significa este error

La restricción funcionó: PostgreSQL garantiza la unicidad incluso bajo concurrencia, y este error es esa garantía disparándose. Dos cosas que conviene saber más allá de lo obvio:

Causas comunes

Cómo diagnosticarlo

-- Qué restricción, qué columnas:
\d users

-- Sospecha de "secuencia rezagada" (error en la _pkey con id seriales):
SELECT max(id) FROM users;
SELECT last_value FROM users_id_seq;
-- si last_value <= max(id), esta es la causa

Si la restricción está sobre una clave de negocio (email, SKU, …) en vez de la clave primaria, mira de dónde viene el valor del DETAIL: el mismo usuario enviando dos veces, lógica de reintento, o dos rutas de código creando la misma entidad.

Cómo solucionarlo

🔍 Lectura relacionada: Elegir el índice adecuado — índices únicos, parciales y de expresión, y qué cuestan en las escrituras.