这种情况一般出现在,将.sql文件导入本地的postgresql数据库后,然后创建或更新数据时候会报错:
Unique violation: 7 错误: 重复键违反唯一约束"table_name_pkey"
解决办法:
1.查看自己报错表的最大id
2.在navicate中执行:Select nextval('table_name_id_seq')命令查看这个表的自增序列值目前是多少
3.一般只要你能看到这篇文章,说明你的自增序列值一定大于表的最大id
4.在navicate中执行:Select setval('table_name_id_seq', “这里写表的最大id+1的值”)
这4步完成,问题立马完美解决!!!!!
转载于:https://www.cnblogs.com/qaing123/p/11027174.html
原文链接:
http://www.cnblogs.com/qaing123/p/11027174.html
SpringBoot 项目使用 Mybatis 框架进行开发,相应的表已经配置了主
键
自增。
@TableId(type = IdType.AUTO)
private Integer id;
数据库
中的字段 id 值也设置了主
键
自增。
出现这个错误的原因是因为当前表的 id 字段的序列值被改了,通过 Navicat 工具可以查看:
可以查看当前值为 209,这是正常的,出现错误的原因就是因为这个当前值被改了,可能改成了 1。
执行一条命令,将序列的当前最大值 +1 ;
1.向用户表新增记录,报
违反
唯一约束
条件 ORA-00001。
2.因为表里设置了自增长字段,当自增长字段的起始值小于现有记录的最大值,就会报错。如表里有526条记录,自增长的值应该是从526以后的值开始,但是自增长的设置值却是从426开始,就会与表里已有的值
重复
,导致报错。
3.找到表中自增长字段现有记录的最大数值。
select max(id) from afuser
4.找到自增长序列里,自增长的起始数值。426比 526小,所以新增时会报错,
5.把起始数值改的比现有记录最大值大.
• 执行insert和update时,会触发约束检查
• InnoDB
违反
约束时,会回滚对应SQL
• MyISAM
违反
约束时,会中断对应的SQL,可能造成不符合预期的结果集
• 可以使用 insert … on duplicate key 来指定触发约束时的动作
• 通常使用 show warnings; 来查看与调试
违反
约束的ERROR
Postgres处理自动递增的方式与MySQL稍有不同。在Postgres中,创建serial字段时,还创建了一个sequence字段,用于跟踪要使用的id。这个序列字段将以值1开始。
在表中插入新记录时,如果不指定id字段,它将使用序列的值,然后递增序列。但是,如果确实指定了id字段,则不会使用序列,也不会更新序列。
我假设,当你转到Postgres时,你已经播种或导入了一些现有的用户,以及他们现有的id。当您用这些用户的id创建这些用户记录时,序列没有被使用,因此它从未被更新。
因此,例如,如果导入了1
在实体类的主
键
上设置自增,在插入数据时,出现如题的错误。
这是因为postgrsql中要插入数据的表的序列(序列对象通常用于为行或者表生成唯一的标识符)的【当前值】并不是表中记录的最后一行,所以出现问题。
选中你要修改序列的表。
修改下【当前值】就可以了。
此时我
数据库
已有id为1046的数据,再次插入相同id时,当然是插入失败的。
当你COPY记录到表时, 或者插入数据时带了自增ID等都不会影响序列的变化, 所以导致了序列与表的记录不一致的情况
下列命令将序列的值更新为比表记录最大值加1
SELECT setval('表名_
唯一约束
的字段_seq', (SELECT max(
唯一约束
的字段) FROM 表名))
我正在使用具有固定线程池50的ExecutorService和使用HikariCP的固定
数据库
连接池50.每个工作线程处理一个数据包(“报告”),检查它是否有效(每个报告必须具有唯一的unit_id,时间,纬度和经度),从连接池中获取
数据库
连接,然后将报告插入报告表.唯一性约束是使用postgresql创建的,并称为“reports_uniqueness_index”.当我的音量很大时,我会收到以...
问题概述在看似随机的时间,我们会收到一个异常“PostgreSQL
重复
键
违反
了
唯一约束
”。我确实认为我知道我们的问题是什么,但是我不想在没有可重现的测试用例的情况下对代码进行更改。但是由于除了随机生产之外,我们无法在任何环境中复制它,因此我要求SO的帮助。在这个项目中,我们有多个postgres
数据库
,并且为每个
数据库
中的每个表配置了主
键
序列。这些序列是这样创建的:create sequence ...