gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 12:01:04 24 4
gpt4 key购买 nike

来自: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,然后查看数据库分配给它的id(主键)值

@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 控制台上运行它,但我刚收到!内部服务器错误:-(我的 ruby 类叫做:

class Mytable < ActiveRecord::Base

所以我运行这个命令:

Mytable.connection.execute('SELECT setval('id_seq', 1000)')

并出现内部服务器错误(在上述命令中同时使用“id”和“id_seq”进行了尝试)但可能是某种 Ruby on Heroku 特定问题导致了问题,所以我会调查并发布另一个问题,而不是更改这个问题。谢谢!

增加相关PostgreSQL命令资料:

http://pointbeing.net/weblog/2008/03/mysql-versus-postgresql-adding-an-auto-increment-column-to-a-table.html

http://archives.postgresql.org/pgsql-general/2006-10/msg01417.php

How to reset postgres' primary key sequence when it falls out of sync?

最佳答案

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

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

或者来自 ActiveRecord::Base 的任何后代(即任何模型类),像这样:

MyRecord.connection.execute('ALTER TABLE tbl AUTO_INCREMENT = 1000')

关于ruby-on-rails - 如何使用 PostgreSQL 强制 ActiveRecord 中的主键从特定整数值开始跳转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7558820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com