Что происходит в транзакциях django, если в on_commit возникает ошибка?
Ситуация
У меня есть база данных postgres, и я использую хук on_commit
для транзакций , чтобы что-то сделать (в данном случае переместить файл, но для целей вопроса неважно, что именно) после того, как сохранение модели было зафиксировано в базе данных.
from django.db import models, transaction
def my_oncommit_callback():
# Do something on commit
raise ValueError("what if I raise an error")
class MyModel(models.Model):
def save(self, *args, **kwwargs):
transaction.on_commit(my_oncommit_callback)
super().save(*args, **kwargs)
Вопрос
Если my_oncommit_callback
вызывает ошибку, транзакция откатывается, или я получу нарушенное состояние, потому что моя функция on_commit не сработала так, как ожидалось?
Судя по вашей собственной ссылке в вопросе, в самой документации Django указано
Обратные вызовы вызываются после успешной фиксации открытой транзакции
Таким образом, сбой обратного вызова не повлияет на исходную транзакцию, поскольку она уже была зафиксирована.