sql - 自增问题postgresql

在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/

相关文章:

dynamic - 在 MongoDB 中为动态添加的字段创建索引

r - 按第一列对矩阵列表进行排序

r - 为什么 R 的 ccf 说 "Autocorrelations of series ' X'

arm - 使用 llvm 从桌面交叉编译到 arm

wordpress - 如何使用非拉丁 url 在 iis 上为 wordpress 编写 web.

visual-c++ - 带颜色的进度条和带有通用控件的边框

r - 如何向现有的 Aspell 词典中添加更多单词?

python - Tkinter Windows 按键事件

composer-php - Composer 安装与更新现有组件?

c# - C# 对象中 [key] 的用途是什么?