此时我数据库已有id为1046的数据,再次插入相同id时,当然是插入失败的。
当你COPY记录到表时, 或者插入数据时带了自增ID等都不会影响序列的变化, 所以导致了序列与表的记录不一致的情况
下列命令将序列的值更新为比表记录最大值加1
SELECT setval('表名_唯一约束的字段_seq', (SELECT max(唯一约束的字段) FROM 表名));
下面是我执行的语句:上面我的id为1046,我执行完这行命令后,setval变为了1085。
此时再次新增,成功!

I recently migrated my rails app to PostgreSQL in order to take advantage of fulltext search.Since the migration coincided with moving to a new webhost, the steps for migration were:Deploy the applica...
Postgres处理自动递增的方式与MySQL稍有不同。在Postgres中,创建serial字段时,还创建了一个sequence字段,用于跟踪要使用的id。这个序列字段将以值1开始。
在表中插入新记录时,如果不指定id字段,它将使用序列的值,然后递增序列。但是,如果确实指定了id字段,则不会使用序列,也不会更新序列。
我假设,当你转到Postgres时,你已经播种或导入了一些现有的用户,以及他们现有的id。当您用这些用户的id创建这些用户记录时,序列没有被使用,因此它从未被更新。
因此,例如,如果导入了1
ORA-00001: 违反唯一约束条件 的解决办法
–当遇到‘违反唯一约束’错误提醒之后,查看源程序中有没有执行删除,如果没有,就手动删除重复数据,如果是插入表里面的数据重复,则在被插入数据的表哪里插入一个嵌套,使得只插入一条数据:
–查看重复数据:
select ID,NAME, count() from TEST_1 t group by ID,NAME having count() >1;
--------------------------------------------手动删除重复数
SELECT max(id) FROM public.rbasics_userinfo;
# 修改最大uid
ALTER SEQUENCE public.basics_userinfo_uid_seq RESTART WITH 《最大id+1》;
nextval(regclass)
bigint
递增序列对象到它的下一个数值并且返回该值。这个动作是自动完成的。即使多个会话并发运行nextval,每个进程也会安全地收到一个唯一的序列值。
currval(regclass)
bigint
在当前会话中返回最近一次nextval抓到的该序列的数值。(如果在本会话中从未在该序列上调用过nextval,那么会报告一个错误。)请注意因为此...
先给表创建一个唯一性约束
alter table 表名 add constraint 约束名 unique(goods_id, user_id, enterprise_id);
INSERT INTO 表名 ( sku, goods_id, user_id, enterprise_id, create_date, create_user_id )
VALUES( ‘222’, 14851, 1...
在实体类的主键上设置自增,在插入数据时,出现如题的错误。
这是因为postgrsql中要插入数据的表的序列(序列对象通常用于为行或者表生成唯一的标识符)的【当前值】并不是表中记录的最后一行,所以出现问题。
选中你要修改序列的表。
修改下【当前值】就可以了。
这种情况一般出现在,将.sql文件导入本地的postgresql数据库后,然后创建或更新数据时候会报错:
Unique violation: 7 错误: 重复键违反唯一约束"table_name_pkey"解决办法:1.查看自己报错表的最大id2.在navicate中执行:Select nextval('table_name_id_seq')命令查看这个表的自增序列值目前是多少3.一般只要你能...