私の PostgreSQL 9.2 データベースは、何らかの理由ですべてのレコードで ID をスキップします。例:
ユーザー
1258930
1258932
1258934
1258936
これは何が原因でしょうか?この問題を解決するための正しい方向へのポインターは高く評価されます。ありがとうございました
私の PostgreSQL 9.2 データベースは、何らかの理由ですべてのレコードで ID をスキップします。例:
ユーザー
1258930
1258932
1258934
1258936
これは何が原因でしょうか?この問題を解決するための正しい方向へのポインターは高く評価されます。ありがとうございました
コメントは、考えられる理由を適切にカバーしています。
nextval
呼び出しdefault
。この問題を解決するための正しい方向へのポインターは大歓迎です
あなたの主な間違いは、これを問題と見なしていることです。生成されたシーケンスにギャップが現れるのは、まったく正常なことです。DB がクラッシュして再起動すると、シーケンスにギャップが生じます。ID の割り当て後にトランザクションがロールバックすると、シーケンスにギャップが生じます。
アプリケーションはこれに対処できなければなりません。ID が何であるかは気にする必要はありません。一意であることだけを考えてください。
詳細と真にギャップのないシーケンスが必要な場合のヒントについては、この回答を参照してください。
DO ALSO
rule
Craigのポイントに追加すると、new.idを別のテーブルに挿入することが主な原因であることがわかると思います。これにより、クエリを書き換えると二重のインクリメントが発生するRULES
ため、new.id は「前回 new.id を計算するために行ったものは何でも」になります (つまり、シーケンスを再度インクリメントすることを意味します)。
一貫している場合、IMO の原因として最も可能性が高いのは、落とし穴を完全に理解せずに誰かが DO ALSO ルールを作成したことです。