2012-12-14 21 views
1

識數的行ID我有ID列在我的表,它是:PostgreSQL的:重新上表

id  BIGSERIAL NOT NULL PRIMARY KEY, ... 

一些行,其中刪除的表得到不一致的id像1,10,11,12後... 即實際行數不會與PG的序列號... 我想我應該以某種方式重新列舉行,是嗎?

+0

你爲什麼要重新編號你所有的行? – willglynn

+0

嗯,因爲9刪除後,我想1後會去2而不是10 – juk

+6

沒有,PostgreSQL的'serial'和'bigserial'不會像那樣工作,也不希望他們。你的'id's不是行號,你也不應該這樣想,它們只是不透明的值,每個表都是唯一的,就是這樣。 –

回答

2

如果要使用無間隙序列標識符,請不要使用SERIALBIGSERIALSEQUENCE)。這是一個常見問題。序列不僅不會重複使用已刪除的ID,而且它們也可能在它們之間存在差距,即使您不刪除任何內容,因爲在事務回滾時或重新啓動數據庫之後ID會被丟棄。

搜索「postgresql無間隙序列」。

我寫了一下這個here

如果您使用的是合成鍵,您應該只關心一個ID是否與另一個ID相等。不要試圖比較他們說「A和B之間有多少ID」;這與SEQUENCE生成的ID無關。