在芹菜任务中运行postgres VACUUM

时间:2013-10-02 15:45:51

标签: django postgresql celery vacuum

我有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?或者以某种方式禁用任务事务逻辑?

1 个答案:

答案 0 :(得分:1)

一般情况下,除非你只是进行了大量的批量删除,否则通常不应该进行真空吸尘。只需确保autovacuum正在运行,并且已启用。它将在后台执行此操作,您不必担心它。

其次,您可以启动系统命令来运行vacuumdb命令行工具。这可以在单独的会话中完成。