【发布时间】:2012-02-24 21:37:36
【问题描述】:
我在 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')
在前 2 个插入中,我明确提到了 id。但是,在这种情况下不会更新表的自动增量指针。因此在第三次插入中我得到了错误:
ERROR: duplicate key value violates unique constraint "test_pkey"
DETAIL: Key (id)=(1) already exists.
在 MyISAM 和 INNODB 引擎中,我从未在 Mysql 中遇到过这个问题。显式与否,mysql 总是根据最大行 id 更新自增指针。
postgres 中这个问题的解决方法是什么?我需要它,因为我想对表中的某些 id 进行更严格的控制。
更新: 我需要它,因为对于某些值,我需要一个固定的 ID。对于其他新条目,我不介意创建新条目。
我认为,只要我明确插入 id,手动将 nextval 指针递增到 max(id) + 1 即可。但我不知道该怎么做。
【问题讨论】: