Создать отсутствующий атрибут автоинкремента с миграцией рельсов - PullRequest
9 голосов
/ 02 февраля 2010

Я пишу миграцию для преобразования приложения, не относящегося к rails, в правильный формат для rails - в одной из таблиц по какой-то причине не задано автоматическое приращение для столбца id. Есть ли быстрый способ включить его во время миграции, может быть, с change_column или чем-то еще?

Ответы [ 3 ]

7 голосов
/ 02 февраля 2010

Вам необходимо выполнить инструкцию SQL.

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

Обратите внимание, что это только пример. Окончательный синтаксис оператора SQL зависит от базы данных.

6 голосов
/ 26 апреля 2010

Если вы находитесь на postgesql, ни один запрос не сделает это. Вам нужно будет создать новую последовательность в базе данных.

create sequence users_id_seq;

Затем добавьте столбец id в вашу таблицу.

alter table users
    add id INT UNIQUE;

Затем установите значение по умолчанию для идентификатора

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

Затем заполните столбец идентификатора. Это может быть довольно долго, если в таблице много строк

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

Надеюсь, это поможет пользователям postgresql ...

5 голосов
/ 28 ноября 2012

Ответ Postgres @ jlfenaux отсутствует на типе serial, который выполняет все автоматически:

ALTER TABLE tbl add tbl_id serial;

Подробнее в этом связанном ответе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...