最近捣鼓一个项目,开发环境如下
rails-3.1.3, 数据库用的是 postgresql,orm 用的是 activerecord.
默认情况下,数据库里表记录的 id 是从 1 开始,但是客户提出一个合理要求说表记录的 id 要从 100 万开始,开始想到的办法是创建一百万条记录然后再删除这一百万条记录,但是感觉这个方法很二,不知道哪位同学有没有更好的办法?谢谢!
http://stackoverflow.com/questions/5440401/change-autoincrement-values-in-migration-postgresql-and-sqlite3
。。确实够 2 的,两种方法:
1、改表:
alter table your_table_name auto_increment = 1000000;
这个是 mysql 的实现方式,postgrelsql 的忘了有没有,google 一下。
2、new 一条数据,然后再强制赋值 id,再把这条数据删了。
row = Table.new(:a =>.......) row.id = 999999 row.save! row.destory
我在用 mysql 数据库的时候,migration 是这么写的,不知道 postgre 是否一样:
create_table :roles, options: 'AUTO_INCREMENT = 10001' do |t|
如果不想新建表的话,应该用 sql 没有问题吧,这个我们也干过
1 楼的帖子里不是说了么⋯⋯但是我没有验证,因为不用 postgresql。SQL 语句是
ALTER SEQUENCE table_name_id_seq RESTART WITH 1000000;
修改这张表的 id 初始自动增长属性。。mysql 和 sqlserver 都有的。
貌似这个问题和 ruby 没啥关系啊...
class CreateUses < AR:Migration def change create_table :users do |t| ... end execute <<-SQL ALTER SEQUENCE users_id_seq START 1000000 RESTART 1000000 SQL end end
这种问题翻文档就好了。PG 的文档超清晰的。不知道是不是德国人写的,废话相当少。
这个问题已经解决,感谢楼上各位的帮助,我采用的是@zhangyuan 提供的方案