这种情况一般出现在,将.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 ...