Dopo ulteriori ricerche ho scoperto la proprietà isolation_level dell'oggetto connessione psycopg2. Si scopre che cambiando questo in 0
ti sposterà fuori da un blocco di transazione. La modifica del metodo del vuoto della classe precedente a quanto segue lo risolve. Nota che ho anche impostato il livello di isolamento su quello che era in precedenza per ogni evenienza (sembra essere 1
per impostazione predefinita).
def vacuum(self):
old_isolation_level = self.conn.isolation_level
self.conn.set_isolation_level(0)
query = "VACUUM FULL"
self._doQuery(query)
self.conn.set_isolation_level(old_isolation_level)
Questo articolo (verso la fine di quella pagina) fornisce una breve spiegazione dei livelli di isolamento in questo contesto.