在PostgreSQL / Rails应用程序中,由什么决定当调用“ create”方法时如何分配“ id”字段?

时间:2019-12-21 19:11:30

标签: ruby-on-rails postgresql pg libpq

我有一个名为“ Post”的模型。由于某些原因,我必须创建具有特定id值的帖子。当我运行Post.last时,它给我的id值最高。但是,当我运行Post.create()时,它尝试创建的id比上一个没有指定id创建的上一个id大1的Post

在我的数据库中没有指定id的情况下创建的帖子数已达到我指定的第一个id帖子的id。这将导致错误,因为Rails尝试创建的Post将具有已经被使用的id值。

是否可以以某种方式覆盖id分配,以使其达到Post.last.id的值?

1 个答案:

答案 0 :(得分:1)

ID由Postgres sequence生成。 Rails将作为rails generate model Post的一部分为您生成此代码,如果使用所有默认值,则表名为posts,序列应称为posts_id_seq

您需要将序列重置为已经使用的ID后的下一个值

如果您要使用的下一个值是例如5000,则类似

ALTER SEQUENCE posts_id_seq RESTART WITH 5000;