Efter mer sökning har jag upptäckt egenskapen isolation_level för anslutningsobjektet psycopg2. Det visar sig att ändra detta till 0
kommer att flytta dig ut ur ett transaktionsblock. Att ändra vakuummetoden för ovanstående klass till följande löser det. Observera att jag också ställer tillbaka isoleringsnivån till vad den tidigare var för säkerhets skull (verkar vara 1
som standard).
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)
Den här artikeln (nära slutet på den sidan) ger en kort förklaring av isoleringsnivåer i detta sammanhang.