在postgresql中遇到自增属性的一些问题
我创建了一个表 emp
create table emp
( empid serial,
empname varcha(50),
primary key (empid)
);
我插入了一个 empid 为空的值:
insert into emp (empname) values ('test1');
接下来通过指定 empid 值插入:
insert into emp (empid,empname) values (2,'test2');
现在,如果我在没有指定 empid 值的情况下插入一个值,它将给出一个错误,因为它会尝试将 empid 作为 2 插入:
insert into emp (empname) values ('test3');
ERROR: duplicate key value violates unique constraint "emp_pkey"
DETAIL: Key (empid)=(2) already exists.
有人可以帮我解决这个问题,这样无论是否指定值,自动增量都应该选择 max(value) +1 ??
谢谢
最佳答案
您不能完全混合使用序列和固定 ID。在不使用序列的情况下插入值不会更新序列,因此会发生冲突。
如果您在批量加载阶段或其他阶段进行手动插入,您可以:
开始
在访问独占模式下锁定表 the_table
做你的INSERT
SELECT setval('seq_name', 14)
,将 14 替换为新的序列值。这可以是针对表的子查询。
提交
...但一般来说,最好避免混合序列 ID 生成和手动分配的 ID。
https://stackoverflow.com/questions/24149065/