我有celery周期性任务需要在每次运行后运行postgres VACUUM查询,否则此任务会占用大量硬盘空间。
我最后尝试在任务中运行VACUUM,但收到错误:
DatabaseError: VACUUM cannot run inside a transaction block
我尝试应用@transaction.commit_manually
装饰器并在调用VACUUM之前执行transaction.commit()
,但出现此错误:
TransactionManagementError: Transaction managed block ended with pending COMMIT/ROLLBACK
有没有办法在芹菜任务中做VACUUM?或者以某种方式禁用任务事务逻辑?
答案 0 :(得分:1)
一般情况下,除非你只是进行了大量的批量删除,否则通常不应该进行真空吸尘。只需确保autovacuum正在运行,并且已启用。它将在后台执行此操作,您不必担心它。
其次,您可以启动系统命令来运行vacuumdb命令行工具。这可以在单独的会话中完成。