【发布时间】:2013-10-09 01:56:54
【问题描述】:
我有 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
有没有办法在 celery 任务中执行 VACUUM ?或者以某种方式禁用任务事务逻辑?
【问题讨论】:
-
如果它占用了磁盘空间,可能是因为它需要它(mvcc 的磁盘页面拆分等)...当您多次运行类似的事务时它是否仍然占用额外的空间?
-
是的,没有 VACUUM。关于向具有巨大文本字段的表插入新行的问题。这就是我的任务。
标签: django postgresql celery vacuum