sequelize autoIncrement为postgres开始id

Wes*_*tum 7 postgresql sequelize.js

我的情况是我想在我的模型上使用autoIncrement id键,但我还需要在它们之间创建灯具和关系.当我创建灯具时,我手动指定了ID(这样我就不必太依赖于可能会出错的顺序和假设).但是当我去创建更多实例(没有指定id,让autoIncrement接管)时,我会遇到来自灯具的ID的碰撞.

我希望能够将初始自动增量数设置为1000,这样我就可以用手动选择的id创建大量的灯具而不会遇到麻烦......或者还有另一种方法可以解决这个问题吗?

jus*_*tin 4

我遇到了同样的问题。解决这个问题的一种方法是在你的装置中保留“id”(自动增量),并假设你已经清除了数据库中的数据,将外键(在你的装置中)与自动增量后应有的内容链接起来。

\n\n

这样做,由于您遗漏id了固定数据,Postgres 将更新它用于为表 X 分配自动增量值的序列(来自 X_id_seq - 您可以 psql; \\c ; \\d (列出数据库); select *来自 X_id_seq)。

\n\n

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

\n\n

您可能必须通过sequelize 运行手动sql 查询。

\n\n

另一种选择是通过您自己的模型制作您自己的装置。我正在做的事情现在正在认真考虑恢复到\xe2\x80\xa6

\n\n

编辑:另外,如果您正在使用sequelize-fixtures,您可能需要查看此处的最后一条评论: https: //github.com/domasx2/sequelize-fixtures/issues/43#issuecomment-147955330

\n\n

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

\n\n

编辑:作为在没有sequelize-fixtures的情况下重写所有内容之前的临时解决方法,我使用以下方法手动设置序列:

\n\n
await db.sequelize.query(\n    `ALTER SEQUENCE "ItemInstances_id_seq" RESTART WITH ${itemInstances.length + 1};`\n);\n
Run Code Online (Sandbox Code Playgroud)\n\n

我认为当你这样做时(在加载夹具之前/之后)并不重要,因为无论如何你都会绕过该序列。

\n