sql >> Base de Datos >  >> RDS >> PostgreSQL

PostgreSQL:¿cómo ejecutar VACUUM desde el código fuera del bloque de transacciones?

Después de más búsquedas, descubrí la propiedad de nivel de aislamiento del objeto de conexión psycopg2. Resulta que cambiando esto a 0 lo sacará de un bloque de transacción. Cambiar el método de vacío de la clase anterior a la siguiente lo resuelve. Tenga en cuenta que también restauré el nivel de aislamiento a lo que era anteriormente por si acaso (parece ser 1 por defecto).

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 artículo (cerca del final de esa página) brinda una breve explicación de los niveles de aislamiento en este contexto.