1
識數的行ID我有ID列在我的表,它是:PostgreSQL的:重新上表
id BIGSERIAL NOT NULL PRIMARY KEY, ...
一些行,其中刪除的表得到不一致的id像1,10,11,12後... 即實際行數不會與PG的序列號... 我想我應該以某種方式重新列舉行,是嗎?
識數的行ID我有ID列在我的表,它是:PostgreSQL的:重新上表
id BIGSERIAL NOT NULL PRIMARY KEY, ...
一些行,其中刪除的表得到不一致的id像1,10,11,12後... 即實際行數不會與PG的序列號... 我想我應該以某種方式重新列舉行,是嗎?
如果要使用無間隙序列標識符,請不要使用SERIAL
或BIGSERIAL
(SEQUENCE
)。這是一個常見問題。序列不僅不會重複使用已刪除的ID,而且它們也可能在它們之間存在差距,即使您不刪除任何內容,因爲在事務回滾時或重新啓動數據庫之後ID會被丟棄。
搜索「postgresql無間隙序列」。
我寫了一下這個here。
如果您使用的是合成鍵,您應該只關心一個ID是否與另一個ID相等。不要試圖比較他們說「A和B之間有多少ID」;這與SEQUENCE
生成的ID無關。
你爲什麼要重新編號你所有的行? – willglynn
嗯,因爲9刪除後,我想1後會去2而不是10 – juk
沒有,PostgreSQL的'serial'和'bigserial'不會像那樣工作,也不希望他們。你的'id's不是行號,你也不應該這樣想,它們只是不透明的值,每個表都是唯一的,就是這樣。 –