使用rails迁移创建缺少的自动增量属性

时间:2010-02-02 06:09:20

标签: ruby-on-rails activerecord migration

我正在编写一个迁移,将非rails应用程序转换为rails的正确格式 - 由于某种原因,其中一个表没有在id列上设置自动增量。在迁移过程中是否可以快速启用它,可能使用change_column或其他东西?

3 个答案:

答案 0 :(得分:7)

您需要执行SQL语句。

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

请注意,这只是一个例子。最终的SQL语句语法取决于数据库。

答案 1 :(得分:6)

如果您使用postgesql,则单个请求将无法进行。您需要在数据库中创建一个新序列。

create sequence users_id_seq;

然后将id列添加到表

alter table users
    add id INT UNIQUE;

然后设置id的默认值

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

然后填充id列。如果表有很多行

,这可能会很长
update users
    set id = nextval('users_id_seq');

希望这有助于postgresql用户...

答案 2 :(得分:5)

Postgres answer by @jlfenaux错过serial类型,会自动为您完成所有操作:

ALTER TABLE tbl add tbl_id serial;

More details in this related answer.