Означает ли долговечность атомарной транзакции 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, в этом случае это не будет точкой сохранения в первую очередь).

Этот пост в блоге может быть полезен.

Вернуться на верх