Vì tôi chưa tìm ra cách "tự động" để thực hiện việc này, nên tôi đang nghĩ đến cách giải quyết sau - cách giải quyết này sẽ khả thi đối với tình huống cụ thể của tôi:
- Đặt trình tự với MAXVALUE 49999 NO CYCLE
- Khi đạt đến 49999, lần lưu tiếp theo () sẽ gặp lỗi postgres
- Nắm bắt ngoại lệ đó và sắp xếp lại dưới dạng lỗi biểu mẫu "bạn đã hết số lượng, vui lòng đặt lại về khối tiếp theo rồi thử lại"
- Cung cấp chế độ xem nơi người dùng có thể kích hoạt khối tiếp theo, tức là thực thi "ALTER SEQUENCE my_seq RESTART VỚI 70000 MAXVALUE 89999"
Tôi không thoải mái về việc tự động khởi động lại khi bắt gặp ngoại lệ:
try:
instance.save()
except RunOutOfIdsException:
restart_id_sequence()
instance.save()
vì tôi lo sợ rằng việc hết id của hai save () đồng thời sẽ dẫn đến hai lần khởi động lại riêng biệt và sau đó là vi phạm ràng buộc duy nhất. (khái niệm về cơ bản giống như vấn đề ban đầu)