代码之家  ›  专栏  ›  技术社区  ›  DGM

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

  •  9
  • DGM  · 技术社区  · 16 年前

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

    3 回复  |  直到 13 年前
        1
  •  7
  •   Simone Carletti    16 年前

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

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

        2
  •  6
  •   jlfenaux    15 年前

    create sequence users_id_seq;
    

    alter table users
        add id INT UNIQUE;
    

    alter table users
        alter column id
             set default nextval('users_id_seq');
    

    然后填充id列。如果表中有许多行,则这可能相当长

    update users
        set id = nextval('users_id_seq');
    

        3
  •  5
  •   Community Mohan Dere    8 年前

    这个 Postgres answer by @jlfenaux serial 键入,它会自动为您执行所有操作:

    ALTER TABLE tbl add tbl_id serial;
    

    More details in this related answer.

    推荐文章