Depois de mais pesquisas, descobri a propriedade de nível_isolamento do objeto de conexão psycopg2. Acontece que alterar isso para
0
irá tirá-lo de um bloco de transação. Alterar o método de vácuo da classe acima para o seguinte resolve. Observe que também defino o nível de isolamento de volta ao que era anteriormente apenas por precaução (parece ser 1
por padrão). 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 artigo (perto do final dessa página) fornece uma breve explicação dos níveis de isolamento neste contexto.