Po dalszych poszukiwaniach odkryłem właściwość izolacji_poziom obiektu połączenia psycopg2. Okazuje się, że zmiana tego na 0
wyprowadzi Cię z bloku transakcyjnego. Zmiana metody próżni powyższej klasy na następującą rozwiązuje ten problem. Zwróć uwagę, że ustawiłem również poziom izolacji z powrotem na taki, jaki był poprzednio na wszelki wypadek (wydaje się być 1
domyślnie).
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)
Ten artykuł (na końcu tej strony) zawiera krótkie wyjaśnienie poziomów izolacji w tym kontekście.