0
定期,我的Django webapps在M2M表上产生SQL错误。PostgreSQL序列被重置?
每次发现ID序列被重置为现有行范围内的值。
该应用程序执行正常的SQL查询,例如:
INSERT INTO "myapp_project" ("name") VALUES ('test1') RETURNING "myapp_project"."id"'
从而导致错误发生,例如:
IntegrityError: duplicate key value violates unique constraint "myapp_project_pkey"
DETAIL: Key (id)=(29) already exists.
然后它原来,myapp_project_id_seq
指向旧的ID号码:
select currval('myapp_project_id_seq')
29
然后可以使用以下方法重置:
select setval('myapp_project_id_seq', (select max(id) from myapp_project))
但是,我无法解释为什么发生这种情况。它通常发生在Django的M2M表格上。在这种情况下,一个只有管理员输入的普通表。有人能为我提供这方面的启发吗?
你几乎肯定将ID的手动地方。我不能说的地方,但那是你应该开始寻找的地方。 – 2014-08-28 17:58:20
有趣。 @RichardHuxton:插入ID是否也会导致序列被重置?或者这是否意味着它被搞乱了? – vdboor 2014-08-29 15:34:48
没有发生什么事是你插入行1,2,3使用序列然后手动做4,5。下一个自动生成的ID将是4,因为它不知道你做了什么。这给出了一个错误。 – 2014-08-29 16:55:55