我正在使用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)
set_isolation_level
是一种解决方法,可以访问psycopg2连接的内部方法。 - Michael Aquilina