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

我正在编写一个迁移,将非rails应用程序转换为rails的正确格式 – 由于某种原因,其中一个表没有在id列上设置自动增量。 在迁移过程中是否有快速启用它的方法,可能使用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; 

然后将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用户…

@jlfenaux的Postgres回答错过了serial类型,它会自动为您完成所有这些操作:

 ALTER TABLE tbl add tbl_id serial; 

这个相关答案的更多细节。