2013-10-02 71 views
0

我有芹菜週期性任務,每次運行後需要運行postgres VACUUM查詢,否則這個任務會吃掉很多硬盤空間。在芹菜任務中運行postgres VACUUM

我試圖在年底內運行任務的真空,但得到的錯誤:

DatabaseError: VACUUM cannot run inside a transaction block 

我試圖申請@transaction.commit_manually裝飾,並呼籲真空之前做transaction.commit(),但得到這個錯誤:

TransactionManagementError: Transaction managed block ended with pending COMMIT/ROLLBACK 

芹菜任務中有沒有辦法做VACUUM?或者以某種方式禁用任務事務邏輯?

+0

如果它吃掉磁盤空間,這可能是因爲它需要它(磁盤頁面分裂爲mvcc等)......當您多次運行類似的事務時是否還在吃掉額外的空間? –

+0

是的,沒有VACUUM。有關將巨大文本字段插入新表的問題。這就是我的任務。 – ramusus

回答

1

一般而言,除非您只是進行了大量的批量刪除,否則通常不必真空。只要確保autovacuum正在運行,並且已啓用。它會在後臺執行此操作,您不必擔心。

其次,您可以觸發系統命令來運行vacuumdb命令行工具。這可以在一個單獨的會話中完成。