Означает ли долговечность атомарной транзакции Django, что нам не нужны точки сохранения
Атомарная транзакция Django имеет аргументы durable
и savepoint
. См. docs.
durable=True
гарантирует, что атомарный блок является крайним атомарным блоком. Согласно документации:
Иногда полезно убедиться, что атомарный блок всегда является крайним атомарным блоком, что гарантирует фиксацию любых изменений в базе данных при безошибочном выходе из блока. Это называется долговечностью и может быть достигнуто установкой durable=True
.
А PostgreSQL SAVEPOINT
устанавливает новую точку сохранения в рамках текущей транзакции. Похоже, что это необходимо только в том случае, если атомарный блок является вложенным.
У меня есть следующие вопросы:
- Если
durable=True
, тоsavepoint
ВСЕГДА должен бытьFalse
, верно? Потому что нет смысла использовать точку сохранения, если атомный блок является крайним атомным блоком. .
- Если
durable=True
, должен ли Django установитьsavepoint=False
для нас? Читая исходный код, кажется, что он не делает этого за нас, но мне кажется, что он должен это делать.
Если transaction.atomic(durable=True)
вложен в другой transaction.atomic
будет выброшен RuntimeError
. Я думаю, что у вас не может быть ситуации, когда вы могли бы установить savepoint=False
и durable=True
(кроме крайних transaction.atomic
, в этом случае это не будет точкой сохранения в первую очередь).
Этот пост в блоге может быть полезен.