PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL - Wie wird VACUUM von Code außerhalb des Transaktionsblocks ausgeführt?

Nach weiterem Suchen habe ich die Eigenschaft isolation_level des Verbindungsobjekts psycopg2 entdeckt. Es stellt sich heraus, dass dies zu 0 geändert werden muss bringt Sie aus einer Transaktionssperre heraus. Das Ändern der Vakuummethode der obigen Klasse in die folgende löst es. Beachten Sie, dass ich für alle Fälle auch die Isolationsstufe auf den vorherigen Wert zurückgesetzt habe (scheint 1 zu sein standardmäßig).

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)

Dieser Artikel (am Ende dieser Seite) bietet eine kurze Erläuterung der Isolationsstufen in diesem Zusammenhang.