DGM*_*DGM 9 migration activerecord ruby-on-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)
Run Code Online (Sandbox Code Playgroud)
请注意,这只是一个例子.最终的SQL语句语法取决于数据库.
如果您使用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用户...
@jlfenaux的Postgres回答错过了serial类型,它会自动完成所有这些操作:
ALTER TABLE tbl add tbl_id serial;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3763 次 |
| 最近记录: |