踩坑日记-处理pg的自增长主键数据异常问题

tags: #postgresql #踩坑

备份迁移完 postgresql的表之后,插入数据的时候发现了报错。

DETAIL:  Key (id)=(2) already exists.

这个实际上是由于自增长的id重复出现导致的,我们要刷新下自增长的id的值。

SELECT MAX(id) FROM duties;

Pasted_image_20220303133529.png

可以看到最大的id已经是80242了,但是自增长的id还是2,这个就导致了这个问题
可以通过设置id自增长来解决这个问题。

select setval('tablename_id_seq', max(id)) from tablename;

实际例子:

SELECT setval('duties_id_seq', (SELECT MAX(id) FROM duties));

tablename_id_seq取得并不是id,取得是nextval的参数 Pasted_image_20220303132816.png

[[postgist创建表]]