Escribo una migración para convertir una aplicación que no es de rieles en el formato correcto para rieles; por alguna razón, una de las tablas no tiene incrementos automáticos establecidos en la columna id. ¿Hay alguna manera rápida de activarlo durante una migración, quizás con change_column
o algo así?Crear el atributo de incremento automático faltante con la migración de rieles
Respuesta
Debe ejecutar una instrucción SQL.
statement = "ALTER TABLE `users` CHANGE `id` `id` SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT"
ActiveRecord::Base.connection.execute(statement)
Tenga en cuenta que esto es solo un ejemplo. La sintaxis de la declaración final de SQL depende de la base de datos.
Si está en postgesql, una única solicitud no lo hará. Tendrá que crear una nueva secuencia en la base de datos.
create sequence users_id_seq;
A continuación, agregue la columna id a su mesa
alter table users
add id INT UNIQUE;
A continuación, establecer el valor predeterminado para la Identificación
alter table users
alter column id
set default nextval('users_id_seq');
A continuación, rellenar la columna ID. Esto puede ser muy largo si la tabla tiene muchas filas
update users
set id = nextval('users_id_seq');
Esperanza esto ayuda a los usuarios de PostgreSQL ...
¡Gracias! ¡Esto es muy útil! –
Los Postgres answer by @jlfenaux se pierde en el tipo serial
, que hace todo por usted de forma automática:
ALTER TABLE tbl add tbl_id serial;
- 1. Generar un campo de incremento automático en rieles
- 2. Cambiar el incremento de los campos de incremento automático por
- 3. Android SQLite incremento automático
- 4. ¿Cómo reiniciar el campo de incremento automático en una migración de ActiveRecord?
- 5. Obtenga el siguiente incremento automático
- 6. C#, marco de la entidad, incremento automático
- 7. campo id y sin opción de incremento automático en la migración
- 8. Incremento automático en phpmyadmin
- 9. MySQL: Olvidé configurar el Incremento automático
- 10. Establecer valor inicial de la columna con incremento automático
- 11. atributo faltante en activerecord
- 12. C# Class Incremento automático ID
- 13. Incremento automático de la clave de la columna Cassandra
- 14. Cómo hacer la migración de rieles con Paperclip
- 15. Crear una vista de MySQL con una columna de ID de incremento automático
- 16. ¿Podemos definir el atributo de incremento automático en los datos centrales?
- 17. Google App Engine - incremento automático
- 18. Contadores de incremento automático almacenados en ConcurrentHashMap
- 19. ¿Hay un incremento automático en sqlite?
- 20. ID de incremento automático en la base de datos H2
- 21. Función de incremento automático en la base de datos
- 22. Crear múltiples columna de índice diferenciado utilizando MySQL con la migración rieles
- 23. Cómo devolver el valor de la columna de incremento automático en SQLite con VB6
- 24. C# Regex - Igualar y reemplazar, Incremento automático
- 25. Administración de migración de rieles: ¿prácticas recomendadas?
- 26. Agregar incremento automático a la columna de la clave principal en Rails
- 27. migración de versiones de rieles menores
- 28. cómo configurar la columna de incremento automático con el desarrollador sql
- 29. Migración de carriles Crear clave principal de tabla
- 30. LINQ to Objects incremento automático número
muchas gracias @Simone Carletti, desperdician día entero para resolver el problema, pero ahora se ha resuelto gracias DGM también, por postin g pregunta específica a mi caso. ¿Pueden darme una idea de cómo escribir procedimientos almacenados en Rails 4.1 de una manera elegante, esperando que me ayuden de nuevo? Feliz codificación. – roarfromror
No conozco mucha actividad en rieles usando procedimientos almacenados: algunas esquinas de rieles tienen poco uso para los lados más potentes de SQL, otras simplemente no lo conocen ... de todos modos, al menos podrías usar esta misma forma de escribir el SQL para crear el procedimiento almacenado. – DGM