我的PostgreSQL 9.2數據庫出於某種原因跳過每個記錄的ID。例如:PostgreSQL總是創建一個具有偶數ID的記錄?
用戶
1258930
1258932
1258934
1258936
什麼會導致此?任何指向正確的方向來解決這個問題是值得讚賞的。謝謝
我的PostgreSQL 9.2數據庫出於某種原因跳過每個記錄的ID。例如:PostgreSQL總是創建一個具有偶數ID的記錄?
用戶
1258930
1258932
1258934
1258936
什麼會導致此?任何指向正確的方向來解決這個問題是值得讚賞的。謝謝
的意見已經充分覆蓋可能的原因:
nextval
電話,說一個由default
和一個明確的;在正確的方向上沒有任何指針來解決這個問題認識
您的主要錯誤是查看這作爲問題。間隙出現在生成的序列中是完全正常的。如果您的數據庫崩潰並重新啓動,則會出現一個間隔。如果事務在分配ID後回滾,則會在順序中出現間隙。
您的應用程序必須能夠處理此。它不應該關心一個ID是什麼,只是它是唯一的。
有關詳細信息和提示,如果您需要真正的無間隙序列,請參閱this answer。
加入Craig's points我認爲你會發現的一個罪魁禍首是DO ALSO
rule
將new.id插入到另一個表中。這會導致雙重遞增,因爲RULES
重寫查詢,所以new.id最終成爲「我們上次計算new.id所做的任何事情」(這意味着再次遞增序列)。
如果它是一致的,最可能的原因IMO是有人創建DO ALSO規則而不完全瞭解陷阱。
我敢打賭,你要麼回滾插入某處(一致),要麼爲每個插入調用'nextval()'兩次。 –
查看數據庫表設置,該列可以設置爲自動遞增2。 –
您可以爲正在使用的序列提供「CREATE SEQUENCE ...」嗎? –