>我有芹菜周期性任务,每次运行后都需要运行 postgres VACUUM 查询,否则此任务会占用大量 HDD 空间。
我尝试在任务中最后运行真空,但出现错误:
DatabaseError: VACUUM cannot run inside a transaction block
在调用 VACUUM 之前,我尝试应用@transaction.commit_manually
装饰器并执行transaction.commit()
,但出现此错误:
TransactionManagementError: Transaction managed block ended with pending COMMIT/ROLLBACK
有没有办法在芹菜任务中做真空?还是以某种方式禁用任务事务逻辑?
通常,除非您刚刚进行了大量的批量删除,否则通常不必清空。 只需确保自动真空正在运行并已启用即可。 它将在后台执行此操作,您不必担心。
其次,您可以触发系统命令来运行 vacuumdb 命令行工具。 这将在单独的会话中完成。