PG::UniqueViolation: ERROR – Ruby and Rails with PostgresSql

Cuando se envían dos o más peticiones simultáneas intentando registrar una cuenta usando el mismo email _a veces_ obtenemos el siguiente error de PostgreSQL:

ActiveRecord::RecordNotUnique (PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "example-table_pkey"
DETAIL: Key (id)=(575) already exists.

Pero parece que cuando se envían dos peticiones simultáneamente, la primera escribe un nuevo registro en la base de datos después de que la próxima petición verifica si el correo ya existe, por lo que la segunda comprobación pasa y trata de escribir de nuevo y plantea la excepción PG, ya que no es capturada por la aplicación Rails.

Solución:

Dentro del proyecto lanzamos la consola de ruby

rails console

Lanzamos la siguiente lines de condigo cambiando $TABLE por la tabla a la cual queremos reiniciarle la pkey

ActiveRecord::Base.connection.reset_pk_sequence!('$TABLE')

Deja un comentario