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