最佳答案
我有以下表格在 postgres:
CREATE TABLE "test" (
"id" serial NOT NULL PRIMARY KEY,
"value" text
)
我正在做以下插入:
insert into test (id, value) values (1, 'alpha')
insert into test (id, value) values (2, 'beta')
insert into test (value) values ('gamma')
在前两个插入中,我明确地提到了 id。但是在这种情况下,表的自动递增指针没有更新。因此,在第3次插入时,我得到了错误:
ERROR: duplicate key value violates unique constraint "test_pkey"
DETAIL: Key (id)=(1) already exists.
我从未在 MyISAM 和 INNODB 引擎中遇到过这个问题。不管显式与否,mysql 总是根据 max 行 id 更新自动增量指针。
这个问题的解决办法是什么?我需要它是因为我想更严格地控制我表中的一些 id。
更新: 我需要它是因为对于某些值,我需要一个固定的 id。对于其他新条目,我不介意创建新的。
我认为当我显式插入 id 时,可以通过手动将 nextval
指针增加到 max(id) + 1
。但我不知道该怎么做。