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

DGM*_*DGM 9 migration activerecord ruby-on-rails

我正在编写一个迁移,将非rails应用程序转换为rails的正确格式 - 由于某种原因,其中一个表没有在id列上设置自动增量.有没有一种快速的方法可以在迁移过程中打开它,可能还有change_column什么?

Sim*_*tti 7

您需要执行SQL语句.

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

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


jlf*_*aux 6

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

create sequence users_id_seq;
Run Code Online (Sandbox Code Playgroud)

然后将id列添加到表中

alter table users
    add id INT UNIQUE;
Run Code Online (Sandbox Code Playgroud)

然后设置id的默认值

alter table users
    alter column id
         set default nextval('users_id_seq');
Run Code Online (Sandbox Code Playgroud)

然后填充id列.如果表有很多行,这可能会很长

update users
    set id = nextval('users_id_seq');
Run Code Online (Sandbox Code Playgroud)

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


Erw*_*ter 5

@jlfenauxPostgres回答错过了serial类型,它会自动完成所有这些操作:

ALTER TABLE tbl add tbl_id serial;
Run Code Online (Sandbox Code Playgroud)

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