私はpsycopg2でPythonを使用しており、VACUUM
数千行を挿入する毎日の操作の後に完全に実行しようとしています。問題は、コード内でコマンドを実行しようとするとVACUUM
、次のエラーが発生することです。
psycopg2.InternalError: VACUUM cannot run inside a transaction block
トランザクションブロックの外部のコードからこれを実行するにはどうすればよいですか?
違いが生じる場合は、単純なDB抽象化クラスがあり、そのサブセットがコンテキスト用に以下に表示されます(実行不可、例外処理とdocstringが省略され、行間調整が行われます)。
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)