Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使用PostgreSQL强制ActiveRecord中的主键从特定整数值跳转开始?_Ruby On Rails_Postgresql_Activerecord_Primary Key - Fatal编程技术网

Ruby on rails 如何使用PostgreSQL强制ActiveRecord中的主键从特定整数值跳转开始?

Ruby on rails 如何使用PostgreSQL强制ActiveRecord中的主键从特定整数值跳转开始?,ruby-on-rails,postgresql,activerecord,primary-key,Ruby On Rails,Postgresql,Activerecord,Primary Key,由此可知:似乎我需要发出SQL命令:ALTERTABLE tbl AUTO_INCREMENT=1000; 但我只是通过ActiveRecord抽象来处理数据库。有没有办法通过活动记录来实现它?是在迁移时,还是在数据库上创建新记录时 我尝试了以下两种方法,但都失败了: @record= myRecord.new while @record.id < 1000 do @record= myRecord.new end 然而,我尝试在我的部署环境(Heroku上的共享数据库)的Rub

由此可知:似乎我需要发出SQL命令:ALTERTABLE tbl AUTO_INCREMENT=1000; 但我只是通过ActiveRecord抽象来处理数据库。有没有办法通过活动记录来实现它?是在迁移时,还是在数据库上创建新记录时

我尝试了以下两种方法,但都失败了:

@record= myRecord.new
while @record.id < 1000 do
    @record= myRecord.new
end
然而,我尝试在我的部署环境(Heroku上的共享数据库)的Ruby控制台上运行它,结果我得到了!返回内部服务器错误:-( 我的ruby类称为:

class Mytable < ActiveRecord::Base
并获得内部服务器错误(在上述命令中使用'id'和'id_seq'尝试) 但可能是某种特定于Ruby on Heroku的问题造成了麻烦,所以我会调查并发布另一个问题,而不是改变这个问题。谢谢

添加与PostgreSQL命令相关的材料:


您可以像这样执行原始sql:

ActiveRecord::Base.connection.execute('ALTER TABLE tbl AUTO_INCREMENT = 1000');
MyRecord.connection.execute('ALTER TABLE tbl AUTO_INCREMENT = 1000')
或者从ActiveRecord::Base的任何子代(即任何模型类),如下所示:

ActiveRecord::Base.connection.execute('ALTER TABLE tbl AUTO_INCREMENT = 1000');
MyRecord.connection.execute('ALTER TABLE tbl AUTO_INCREMENT = 1000')

我敢肯定,在PostgreSQL中,这将失败,因为alter表中没有auto_increment=@ScottMarlowe,你可能是对的,因为我不熟悉PostgreSQL,所以我只是对所需的文字SQL进行了操作。如果你熟悉它,也许你可以发布一个比我更好的答案?谢谢@ScottMarlowe!在阅读你的评论之前,我还找到了PostgreSQL命令。我正在使用默认的ActiveRecord自动生成d类的主键,因此它只是命名为“id”,但我不知道与其值生成相关联的序列的名称。Ben Lee,你的答案基本上是正确的,即如何运行原始sql。我刚刚添加了最后一位。至于序列名称,你能以任何方式连接到db以运行\d tablename并查看吗?如果不能,它通常按照tab的标准命名约定lename_colname_seq.类似于select setval('table_col_seq',1000);
MyRecord.connection.execute('ALTER TABLE tbl AUTO_INCREMENT = 1000')