Используя Django с бэкэндом PostgreSQL (8.x), у меня есть модель, где мне нужно пропустить блок идентификаторов, например. после выдачи 49999 я хочу, чтобы следующий идентификатор был 70000, а не 50000 (потому что этот блок зарезервирован для другого источника, где экземпляры явно добавляются с идентификатором - я знаю, что это не очень хороший дизайн, но это то, с чем мне приходится работать).
Какое самое правильное / безопасное место для этого?
Я знаю, что могу установить последовательность с помощью
SELECT SETVAL(
(SELECT pg_get_serial_sequence('myapp_mymodel', 'id')),
70000,
false
);
но когда Django фактически вытаскивает число из последовательности?
Должен ли я переопределить MyModel.save (), вызвать его супер, а затем схватить меня курсор и проверить с помощью
SELECT currval(
(SELECT pg_get_serial_sequence('myapp_mymodel', 'id'))
);
Я полагаю, что django может продвинуть последовательность даже в случае сбоя при сохранении модели, поэтому я хочу убедиться, что всякий раз, когда она достигает того числа, которое она опережает, есть ли место лучше, чем save ()?
P.S .: Даже если это был путь - могу ли я на самом деле выяснить курс для сессии save (), как это? если я возьму у меня соединение и курсор и выполню этот второй оператор SQL, я не буду в другом сеансе и, следовательно, не получу курс?
Спасибо за любые указатели.
РЕДАКТИРОВАТЬ : У меня такое чувство, что это должно быть сделано на уровне базы данных (проблемы параллелизма), и я отправил соответствующий вопрос PostgreSQL - Как безопасно переслать последовательность первичного ключа в PostgreSQL? 1022 *