Создайте недостающий автоматический инкрементный атрибут с миграцией направляющих

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

9
задан alf 23 September 2012 в 00:10
поделиться

2 ответа

Вам нужно выполнить оператор SQL.

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

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

7
ответ дан 4 December 2019 в 11:41
поделиться

Если вы используете 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 ...

6
ответ дан 4 December 2019 в 11:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: