Я использую Python с psycopg2, и я пытаюсь запустить полный VACUUM
после ежедневной операции, которая вставляет несколько тысяч строк. Проблема в том, что когда я пытаюсь запустить команду VACUUM
в моем коде, я получаю следующую ошибку:
psycopg2.InternalError: VACUUM cannot run inside a transaction block
Как я могу запустить это из кода вне транзакционного блока?
Если это имеет значение, у меня есть простой класс абстракции DB, подмножество которого показано ниже для контекста (не выполняются, исключение и обработка docstrings опущены и корректировки строк):
class db(object):
def __init__(dbname, host, port, user, password):
self.conn = psycopg2.connect("dbname=%s host=%s port=%s \
user=%s password=%s" \
% (dbname, host, port, user, password))
self.cursor = self.conn.cursor()
def _doQuery(self, query):
self.cursor.execute(query)
self.conn.commit()
def vacuum(self):
query = "VACUUM FULL"
self._doQuery(query)