2011-11-03 35 views
5

我最近遷移數據庫從MySQL向pgsql 9PostgreSQL的設置一張ID寫入

但現在,當我嘗試創建一個新的對象(Django管理),它告訴我,該ID我想使用(從一開始,每次嘗試都增加)已經被使用。

我猜測有一個指針或索引需要設置爲最後使用的ID。我對麼?

+0

您可以將列的類型設置爲'serial',postgreSQL將自動爲您創建一個序列。 – Johan

+0

我幾乎可以肯定它是由於表由django創建的。 – demux

+0

我在這裏找到了答案:http://stackoverflow.com/questions/1709705/postgresql-nextval-generating-existing-values – demux

回答

7

當你定義你的表,PostgreSQL的相當於「AUTO_INCREMENT」是:

CREATE TABLE foo (
    id SERIAL, 
    ... 
); 

如果已經創建了表(我懷疑它是),你可以手動添加此:

CREATE SEQUENCE foo_id_seq; 
ALTER TABLE foo ALTER COLUMN id SET DEFAULT nextval('foo_id_seq'); 

請注意,如果你想堅持與PG 會給你使用以下格式爲您的序列名稱默認名稱:

<table name>_<column name>_seq 

因此在我的例子中,foo_id_seq

+0

已經有一個由django創建的表和序列。所以我不必創建序列並修改表格。但是有效的是:select setval('uploads_id_seq',6965); (上傳表名) – demux

2

如果表已遷移並使用串行來替換mysql自動增量列,則可能會遷移您的數據而不增加串行序列。查找postgresql setval函數,將您的序列設置爲您的表中現有最高關鍵點以上的值。

+0

我在這裏找到它:http://www.postgresql.org/docs/current/static/functions-sequence.html我是新來的postgresql;你能舉個例子嗎? – demux

+0

'SELECT setval('nameOfSequence',42);' – Ketema