使用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;
这个相关答案的更多细节。