Después de más búsquedas, descubrí la propiedad de nivel de aislamiento del objeto de conexión psycopg2. Resulta que cambiando esto a 0
lo sacará de un bloque de transacción. Cambiar el método de vacío de la clase anterior a la siguiente lo resuelve. Tenga en cuenta que también restauré el nivel de aislamiento a lo que era anteriormente por si acaso (parece ser 1
por defecto).
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)
Este artículo (cerca del final de esa página) brinda una breve explicación de los niveles de aislamiento en este contexto.