PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

PostgreSQL - comment exécuter VACUUM à partir du code en dehors du bloc de transaction ?

Après plus de recherches, j'ai découvert la propriété isolation_level de l'objet de connexion psycopg2. Il s'avère que changer ceci en 0 vous fera sortir d'un bloc de transaction. Changer la méthode de vide de la classe ci-dessus en la suivante le résout. Notez que j'ai également remis le niveau d'isolement à ce qu'il était auparavant juste au cas où (semble être 1 par défaut).

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)

Cet article (vers la fin de cette page) fournit une brève explication des niveaux d'isolement dans ce contexte.