2013-10-02 3 views
0

У меня есть периодическая задача сельдерея, которая должна запускать postgres VACUUM-запрос после каждого прогона, иначе эта задача съедает много места на жестком диске.Запуск postgres VACUUM внутри задачи сельдерея

Я попытался запустить VACUUM внутри задачи в конце, но получил сообщение об ошибке:

DatabaseError: VACUUM cannot run inside a transaction block 

Я пытался применить @transaction.commit_manually декоратора и делать transaction.commit() перед вызовом VACUUM, но получил эту ошибку:

TransactionManagementError: Transaction managed block ended with pending COMMIT/ROLLBACK 

Есть ли способ сделать ВАКУУМ внутри задачи сельдерея? Или каким-то образом отключить логику транзакций задачи?

+0

Если он питается дисковым пространством, возможно, это потому, что ему это нужно (разбиение диска на разделы для mvcc и т. Д.). Разве все еще есть лишнее пространство, когда вы запускаете подобные транзакции несколько раз? –

+0

Да, без ВАКУУМА. Эта проблема о вводе новых строк в таблицу с огромным текстовым полем. Это моя задача. – ramusus

ответ

1

В общем, обычно вам не нужно пылесосить, если только вы просто не сделали большой объем удаления. Просто убедитесь, что autovacuum запущен и включен. Он будет делать это в фоновом режиме, и вам не придется беспокоиться об этом.

Во-вторых, вы можете запустить системную команду для запуска инструмента командной строки vacuumdb. Это будет сделано в отдельной сессии.

Смежные вопросы