Reseteando claves primarias en rails
Cuando se cargan datos desde el seeds en rails y se ingresan claves primarias manualmente quedaremos en un problema donde no podremos ingresar nuevos elementos, obtendremos un error del tipo:
Esto se debe a que cuando ingresamos valores manualmente el valor de la secuencia autoincremental no se incrementa, y luego caemos en la posibilidad de que al ingresar un dato el valor entregado por el secuenciador ya se encuentre en la base de datos causando un error de duplicidad de clave primaria.
Resolviendo el problema de las claves primarias
La forma de resolver esto consiste en resetear los valores de los secuenciadores a los ids del último registro de cada tabla, y de esta forma que sea imposible que se genere una clave primaria duplicada.
ActiveRecord::Base.connection.tables.each do |table| if table != "schema_migrations" result = ActiveRecord::Base.connection .execute("SELECT id FROM #{table} ORDER BY id DESC LIMIT 1") ai_val = result.first['id'].to_i + 1 puts "Resetting auto increment ID for #{table} to #{ai_val}" ActiveRecord::Base.connection .execute("ALTER SEQUENCE #{table}_id_seq RESTART WITH #{ai_val}") end end
Director de DesafíoLatam. Ingeniero Civil Informático de la Universidad Federico Santa María. Emprendedor lean, dedicado al desarrollo de una mejor web con ruby on rails. Fanático de los números y las métricas, la música y la fotografía.