これを行う「自動化された」方法をまだ見つけていないので、次の回避策を考えています-それは私の特定の状況で実行可能です:
- MAXVALUE 49999NOCYCLEでシーケンスを設定します
- 49999に達すると、次のsave()でpostgresエラーが発生します
- その例外をキャッチし、「番号が足りなくなったので、次のブロックにリセットしてから再試行してください」というフォームエラーとして再発生させます。
- ユーザーが次のブロックをアクティブ化できるビューを提供します。つまり、「ALTER SEQUENCE my_seq RESTART WITH70000MAXVALUE89999」を実行します
例外をキャッチしたときに自動的に再起動することに不安があります:
try:
instance.save()
except RunOutOfIdsException:
restart_id_sequence()
instance.save()
2つの同時save()のIDが不足すると、2つの別々の再起動が発生し、その後、一意性制約に違反するのではないかと心配しています。 (基本的に元の問題と同じ概念)