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

In a PostgreSQL/Rails app, what decides how the 'id' field is allocated when 'create' method is called?

我有一个模型叫做 "Post"。由于某些原因,我不得不创建具有特定 id 值的 Post。当我 运行 Post.last 时,它给了我最高 id 值的 Post。但是,当我 运行 Post.create() 时,它会尝试创建一个 Post,其 id 比最后一个 Post 的 id 大 1 创建时没有指定 id

我的数据库中没有指定 id 创建的 Post 的数量现在已经赶上第一个 Post 的 id,其 id 我指定。这会导致错误,因为 Rails 尝试创建的 Post 会有一个已被占用的 id 值。

是否有可能以某种方式覆盖 id 分配,使其按照 Post.last.id 的值进行分配?

ID 由 Postgres sequence 生成。 Rails 将作为 rails generate model Post 的一部分为您生成它,如果您使用所有默认值,则您的 table 称为 posts 并且序列应称为 posts_id_seq.

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

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

ALTER SEQUENCE posts_id_seq RESTART WITH 5000;