sequelize autoIncrement starting id for postgres



我希望在我的模型上有autoIncrement id键,但我也需要创建固定装置和它们之间的关系。当我创建fixture时,我会手动指定id(这样我就不必太依赖订单和可能出错的假设)。但是,当我创建更多的实例时(不指定id,让autoIncrement接管),我会与fixture中的id发生冲突。

我希望能够将初始的自动增量设置为1000左右,这样我就可以用手动选择的ID创建大量的固定装置,而不会遇到麻烦。。。或者有其他方法可以解决这个问题吗?

我遇到了同样的问题。一种解决方法是将"id"(自动递增)保留在fixture中,并假设您已经清除了数据库中的数据,则将外键(在fixture)与它们在自动递增后应该是的值链接起来。

这样做,由于您在fixture数据中遗漏了id,Postgres将更新它用于为表X分配自动递增值的序列(从X_id_seq-您可以psql;\c;\d(列出dbs);从X_id_seq中选择*)。

另一种方法是继续做你(和我)正在做的事情,即手动设置自动递增的id,然后以某种方式更改序列表X_id_seq,将其last_value设置为它应该是的任何值。

您可能需要通过sequelize运行手动sql查询。

另一种选择是通过自己的模型制作自己的固定装置。我正在做的事情,现在正在认真考虑恢复…

编辑:此外,如果你正在使用sequelize fixture,你可能想看看这里的最后一条评论:https://github.com/domasx2/sequelize-fixtures/issues/43#issuecomment-147955330

编辑:打开的问题:https://github.com/domasx2/sequelize-fixtures/issues/71

编辑:在没有顺序化固定装置的情况下重写所有内容之前,作为一个临时工作,我使用以下内容手动设置顺序:

await db.sequelize.query(
`ALTER SEQUENCE "ItemInstances_id_seq" RESTART WITH ${itemInstances.length + 1};`
);

我认为当你这样做时(在加载固定装置之前/之后)并不重要,因为你无论如何都是通过传递序列。

最新更新