PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

PostgreSQL - como executar o VACUUM do código fora do bloco de transação?


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.