Я пишу миграцию для преобразования приложения для ненаправляющих в правильный формат для направляющих - одна из таблиц по некоторым причинам не имеет автоматического инкрементного набора на идентификационном столбце. Есть ли быстрый способ включить его в то время как в миграции, возможно, с change_column
или что-то?
Вам нужно выполнить оператор SQL.
statement = "ALTER TABLE `users` CHANGE `id` `id` SMALLINT( 5 ) UNSIGNED NOT NULL AUTO_INCREMENT"
ActiveRecord::Base.connection.execute(statement)
Обратите внимание, что это просто пример. Окончательный синтаксис оператора SQL зависит от базы данных.
Если вы используете postgesql, ни один запрос не будет выполнен. Вам нужно будет создать новую последовательность в базе данных.
create sequence users_id_seq;
Затем добавьте столбец идентификатора в вашу таблицу
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 ...