0

我有 celery 定期任务,需要在每次运行后运行 postgres VACUUM 查询,否则此任务会占用大量硬盘空间。

最后我尝试在任务中运行 VACUUM,但出现错误:

DatabaseError: VACUUM cannot run inside a transaction block

我尝试在调用 VACUUM 之前应用@transaction.commit_manually装饰器并执行此操作,但出现此错误:transaction.commit()

TransactionManagementError: Transaction managed block ended with pending COMMIT/ROLLBACK

有没有办法在芹菜任务中做 VACUUM ?或者以某种方式禁用任务事务逻辑?

4

1 回答 1

1

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

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

于 2013-11-22T04:52:43.637 回答