sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSQL - hvordan kører man VACUUM fra kode uden for transaktionsblok?

Efter mere søgning har jeg opdaget egenskaben isolation_level for psycopg2-forbindelsesobjektet. Det viser sig at ændre dette til 0 vil flytte dig ud af en transaktionsblok. Ændring af vakuummetoden for ovenstående klasse til følgende løser det. Bemærk, at jeg også sætter isolationsniveauet tilbage til, hvad det tidligere var, for en sikkerheds skyld (synes at være 1 som standard).

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)

Denne artikel (nærmest slutningen på den side) giver en kort forklaring af isolationsniveauer i denne sammenhæng.



  1. Affyrer SQL-forespørgsel ved klik på knappen?

  2. Hvordan implementerer man hierarkiske cms-websteder?

  3. Er min forståelse af Unicorn, Sidekiq og DB Pool størrelse korrekt?

  4. meget stor mysql-tabel og rapportering