Karena saya belum menemukan cara "otomatis" untuk melakukan ini, saya memikirkan solusi berikut - ini akan layak untuk situasi khusus saya:
- Setel urutan dengan MAXVALUE 49999 NO CYCLE
- Ketika 49999 tercapai, save() berikutnya akan mengalami kesalahan postgres
- Tangkap pengecualian itu dan buat kembali sebagai kesalahan formulir "Anda kehabisan angka, harap setel ulang ke blok berikutnya lalu coba lagi"
- Memberikan tampilan di mana pengguna dapat mengaktifkan blok berikutnya, yaitu menjalankan "ALTER SEQUENCE my_seq RESTART WITH 70000 MAXVALUE 89999"
Saya tidak nyaman melakukan restart secara otomatis ketika menangkap pengecualian:
try:
instance.save()
except RunOutOfIdsException:
restart_id_sequence()
instance.save()
karena saya khawatir dua save() bersamaan kehabisan id akan menyebabkan dua restart terpisah, dan pelanggaran berikutnya dari batasan unik. (konsep dasarnya sama dengan masalah awal)