2009-02-13 102 views
20

我一直在Django的應用程序工作。首先,爲了簡單起見,我一直在使用sqlite3作爲數據庫。Django + PostgreSQL:如何重置主鍵?

但是,一旦我轉移到PostgreSQL,我遇到了一些問題:一旦我清除表的主鍵不會重置。

這個程序是一個長時間(星期)播放的遊戲。因此,每次新遊戲開始時,所有數據都會從數據庫中清除,然後添加新的隨機數據。

我希望每次清理/重建遊戲時都能夠從主鍵開始1「重新開始」。

該代碼仍然按原樣運行,但整數是描述遊戲中對象的非常自然的方式。我希望每個新遊戲都從1開始,而不是上一次遊戲中斷。

如何在PostgreSQL中重置主鍵計數器?請記住,我不需要保留表中的數據,因爲無論如何我都會清除它。

+0

我想我可以訴諸只是刪除表,然後重新創建它,但我寧願不要如果可以避免... – 2009-02-13 05:59:44

+0

我自己丟下了桌子......我花了太多時間試圖弄清楚 – fuentesjr 2009-02-13 07:12:43

回答

25

在你的app目錄試試這個:

python manage.py help sqlsequencereset 

管成這樣PSQL實際運行復位:

python manage.py sqlsequencereset myapp1 myapp2 | psql 

編輯:這裏是從這輸出的例子命令在我的一張桌子上:

BEGIN; 
SELECT setval('"project_row_id_seq"', coalesce(max("id"), 1), max("id") IS NOT null) FROM "project_row"; 
COMMIT; 
0
+0

似乎沒有工作......刪除所有的數據,但主鍵仍然開始他們的位置之前離開。例如,如果我插入500行,則截斷表,然後插入另一個500,主鍵將從501到1000,而不是從1-500。 – 2009-02-13 05:58:16

+0

嗯,試試這個:ALTER TABLE theTableInQuestion AUTO_INCREMENT = 0 – superUntitled 2009-02-13 06:35:53

1

我查看自動遞增主鍵作爲數據庫記錄的純粹內部標識符,我不喜歡將它們公開給用戶。當然,將它們作爲URL的一部分使用是一種常見的設計,但即使有slug或其他標識符也更合適。