2010-02-02 7 views

Respuesta

7

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.

+0

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

+0

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

6

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 ...

+0

¡Gracias! ¡Esto es muy útil! –

Cuestiones relacionadas