2010-02-02 10 views

Odpowiedz

7

Należy wykonać instrukcję SQL.

statement = "ALTER TABLE `users` CHANGE `id` `id` SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT" 
ActiveRecord::Base.connection.execute(statement) 

Uwaga: to tylko przykład. Ostateczna składnia instrukcji SQL zależy od bazy danych.

+0

Bardzo dziękuję @Simone Carletti, zmarnowany cały dzień, aby rozwiązać ten problem, ale teraz jest rozwiązany i dzięki DGM też dla postin g pytanie specyficzne dla mojej sprawy. Czy możesz mi dać pomysł na pisanie procedur przechowywanych w szynach 4.1 w fantazyjny sposób, mając nadzieję, że znowu mi pomożecie. Szczęśliwe kodowanie. – roarfromror

+0

Nie znam zbyt dużej aktywności w szynach przy użyciu procedur przechowywanych - niektóre rogi szyn nie mają większego znaczenia dla bardziej wydajnych stron SQL, inne po prostu o tym nie wiedzą ... w każdym razie, przynajmniej możesz użyć ta sama forma, aby napisać SQL, aby utworzyć procedurę przechowywaną. – DGM

6

Jeśli jesteś na postgesql, pojedynczy wniosek nie będzie to zrobić. Musisz utworzyć nową sekwencję w bazie danych.

create sequence users_id_seq; 

Następnie dodać kolumnę id do stolika

alter table users 
    add id INT UNIQUE; 

Następnie ustawić domyślną wartość dla id

alter table users 
    alter column id 
     set default nextval('users_id_seq'); 

następnie wypełnić kolumnę id. To może być dość długo, jeśli tabela zawiera wiele wierszy

update users 
    set id = nextval('users_id_seq'); 

Nadzieja to pomaga użytkownikom postgresql ...

+0

Dzięki! To jest bardzo pomocne! –

Powiązane problemy