PSQL报错误: 重复键违反唯一约束“citizen_experience_range_pkey“

Postgres处理自动递增的方式与MySQL稍有不同。在Postgres中,创建serial字段时,还创建了一个sequence字段,用于跟踪要使用的id。这个序列字段将以值1开始。
在表中插入新记录时,如果不指定id字段,它将使用序列的值,然后递增序列。但是,如果确实指定了id字段,则不会使用序列,也不会更新序列。
我假设,当你转到Postgres时,你已经播种或导入了一些现有的用户,以及他们现有的id。当您用这些用户的id创建这些用户记录时,序列没有被使用,因此它从未被更新。
因此,例如,如果导入了10个用户,则有ID为1-10的用户,但序列仍然是1。当您尝试在不指定id的情况下创建新用户时,它会从序列(1)中提取值,并且您会得到一个唯一的冲突,因为您已经有一个id为1的用户。
要解决此问题,需要将users\ id\ seq sequence值设置为现有用户的MAX(id)。可以尝试以下操作(未测试):

SELECT setval(pg_get_serial_sequence('users', 'id'), coalesce(max(id)+1,1), false) FROM users;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值