1

私の PostgreSQL 9.2 データベースは、何らかの理由ですべてのレコードで ID をスキップします。例:

ユーザー

1258930
1258932
1258934
1258936

これは何が原因でしょうか?この問題を解決するための正しい方向へのポインターは高く評価されます。ありがとうございました

4

2 に答える 2

1

コメントは、考えられる理由を適切にカバーしています。

  • 複数のnextval呼び出しdefault
  • 複数のテーブルで使用されている同じシーケンス
  • ロールバック中のトランザクション

この問題を解決するための正しい方向へのポインターは大歓迎です

あなたの主な間違いは、これを問題と見なしていることです。生成されたシーケンスにギャップが現れるのは、まったく正常なことです。DB がクラッシュして再起動すると、シーケンスにギャップが生じます。ID の割り当て後にトランザクションがロールバックすると、シーケンスにギャップが生じます。

アプリケーションはこれに対処できなければなりません。ID が何であるかは気にする必要はありません。一意であることだけを考えてください。

詳細と真にギャップのないシーケンスが必要な場合のヒントについては、この回答を参照してください。

于 2012-12-12T01:52:17.683 に答える
0

DO ALSO ruleCraigのポイントに追加すると、new.idを別のテーブルに挿入することが主な原因であることがわかると思います。これにより、クエリを書き換えると二重のインクリメントが発生するRULESため、new.id は「前回 new.id を計算するために行ったものは何でも」になります (つまり、シーケンスを再度インクリメントすることを意味します)。

一貫している場合、IMO の原因として最も可能性が高いのは、落とし穴を完全に理解せずに誰かが DO ALSO ルールを作成したことです。

于 2013-04-07T14:54:47.480 に答える