जैसा कि मुझे अभी तक ऐसा करने का "स्वचालित" तरीका नहीं मिला है, मैं निम्नलिखित समाधान के बारे में सोच रहा हूं - यह मेरी विशेष स्थिति के लिए संभव होगा:
- अनुक्रम को MAXVALUE 49999 NO CYCLE के साथ सेट करें
- जब 49999 तक पहुंच जाता है, तो अगला सेव () पोस्टग्रेज त्रुटि में चलेगा
- उस अपवाद को पकड़ें और एक फ़ॉर्म त्रुटि के रूप में फिर से लिखें "आपकी संख्या समाप्त हो गई है, कृपया अगले ब्लॉक पर रीसेट करें और फिर से प्रयास करें"
- एक ऐसा दृश्य प्रदान करें जहां उपयोगकर्ता अगले ब्लॉक को सक्रिय कर सके, अर्थात "ALTER SEQUENCE my_seq RESTART with 70000 MAXVALUE 89999" निष्पादित करें
अपवाद को पकड़ते समय मैं स्वचालित रूप से पुनरारंभ करने के बारे में असहज हूं:
try:
instance.save()
except RunOutOfIdsException:
restart_id_sequence()
instance.save()
जैसा कि मुझे डर है कि दो समवर्ती सेव () के आईडी से बाहर होने से दो अलग-अलग पुनरारंभ होंगे, और बाद में अद्वितीय बाधा का उल्लंघन होगा। (मूल रूप से मूल समस्या के समान अवधारणा)