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