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

PostgreSQL:come eseguire VACUUM dal codice al di fuori del blocco di transazione?

Dopo ulteriori ricerche ho scoperto la proprietà isolation_level dell'oggetto connessione psycopg2. Si scopre che cambiando questo in 0 ti sposterà fuori da un blocco di transazione. La modifica del metodo del vuoto della classe precedente a quanto segue lo risolve. Nota che ho anche impostato il livello di isolamento su quello che era in precedenza per ogni evenienza (sembra essere 1 per impostazione predefinita).

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)

Questo articolo (verso la fine di quella pagina) fornisce una breve spiegazione dei livelli di isolamento in questo contesto.