自动增量问题postgresql

时间:2014-06-10 19:09:58

标签: sql postgresql auto-increment

面对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');
  

错误:重复键值违反了唯一约束" emp_pkey"
  DETAIL:Key(empid)=(2)已经存在。

有人可以帮我解决这个问题,以便在有或没有指定值的情况下,自动增量应该选择最大值(值)+1 ??

谢谢

1 个答案:

答案 0 :(得分:1)

您无法干净地混合使用序列和固定ID。不使用序列插入值不会更新序列,因此您将发生冲突。

如果您在批量加载阶段进行手动插入,或者您可以:

  • BEGIN

  • LOCK TABLE the_table IN ACCESS EXCLUSIVE MODE

  • 执行INSERT s

  • SELECT setval('seq_name', 14),用新的序列值替换14。这可以是针对该表的子查询。

  • COMMIT

...但总的来说,最好避免混合序列ID生成和手动分配的ID。