Efter mere søgning har jeg opdaget egenskaben isolation_level for psycopg2-forbindelsesobjektet. Det viser sig at ændre dette til 0
vil flytte dig ud af en transaktionsblok. Ændring af vakuummetoden for ovenstående klasse til følgende løser det. Bemærk, at jeg også sætter isolationsniveauet tilbage til, hvad det tidligere var, for en sikkerheds skyld (synes at være 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)
Denne artikel (nærmest slutningen på den side) giver en kort forklaring af isolationsniveauer i denne sammenhæng.