【发布时间】:2011-09-26 17:27:11
【问题描述】:
从此:How to make a primary key start from 1000?看来我需要发出SQL命令:ALTER TABLE tbl AUTO_INCREMENT = 1000; 但我只是通过 ActiveRecord 抽象处理数据库。有没有办法通过活动记录来实现它?是在迁移时还是在数据库上创建新记录时动态?
我尝试了以下两种方法,但都失败了:
@record= myRecord.new
while @record.id < 1000 do
@record= myRecord.new
end
效率低下,但只会发生一次,但 Rails 报告 @record.id 为 nil,因此无法进行
@record.save
if @record.id <1000
@record.id = 1000 + @record.id
@record.save!
end
rails 以某种方式报告 @record 中的唯一字段之一已经存在,因此无法再次保存 @record。
编辑:我的错,上面是 MySQL 命令......对于 PostgreSQL,它似乎是沿线的东西(http://archives.postgresql.org/pgsql-general/2006-10/msg01417.php):
SELECT setval('id_seq',100111);
但是,我尝试在我的部署环境(Heroku 上的共享数据库)的 Ruby 控制台上运行它,但我得到了 !Internal server error back :-( 我的 ruby 类被称为:
class Mytable < ActiveRecord::Base
所以我运行这个命令:
Mytable.connection.execute('SELECT setval('id_seq', 1000)')
并得到内部服务器错误(在上述命令中尝试使用“id”和“id_seq”) 但可能是某种 Ruby on Heroku 特定问题导致了问题,所以我会调查并发布另一个问题,而不是更改这个问题。谢谢!
添加相关PostgreSQL命令资料:
http://archives.postgresql.org/pgsql-general/2006-10/msg01417.php
How to reset postgres' primary key sequence when it falls out of sync?
【问题讨论】:
标签: ruby-on-rails postgresql activerecord primary-key