项目使用Django和Postgresql 9.5。有时我在芹菜任务中看到错误。
当对象需要更改指定列时,它将使用celery任务。
该任务将对象和更新列的单独表更改历史记录写入(不是由Django ORM提供的原始SQL)。
通过FDW扩展将任务写入历史记录到外部表中。
抛出异常:
Remote SQL command: COMMIT TRANSACTION\nSQL statement "SELECT 1 FROM ONLY "public"."incident_incident" x WHERE "id" OPERATOR(pg_catalog.=) $1 FOR KEY SHARE OF x"\n',)
我无法理解为什么会引发异常。任务很简单
答案 0 :(得分:1)
在芹菜中,当您进行交易时,可以使用transaction.atomic
块来完成。
例如:
@app.task(bind=True)
def do_task(self)
try:
with transaction.atomic():
# Do DB OP
except (SomeException,Exception) as exc:
raise self.retry(exc=exc)
还有其他方法。您可以在模型中添加有关对象更改的新字段并进行跟踪。您可以阅读this article on medium regarding this approach。希望对您有帮助!