PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

PostgreSQL - jak uruchomić VACUUM z kodu spoza bloku transakcyjnego?

Po dalszych poszukiwaniach odkryłem właściwość izolacji_poziom obiektu połączenia psycopg2. Okazuje się, że zmiana tego na 0 wyprowadzi Cię z bloku transakcyjnego. Zmiana metody próżni powyższej klasy na następującą rozwiązuje ten problem. Zwróć uwagę, że ustawiłem również poziom izolacji z powrotem na taki, jaki był poprzednio na wszelki wypadek (wydaje się być 1 domyślnie).

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)

Ten artykuł (na końcu tej strony) zawiera krótkie wyjaśnienie poziomów izolacji w tym kontekście.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres:BŁĄD:plan w pamięci podręcznej nie może zmieniać typu wyniku

  2. Postgres nie zwraca poprawnie lastval()

  3. Zaktualizuj lub wstaw (wiele wierszy i kolumn) z podzapytania w PostgreSQL

  4. Błąd PostgreSQL:program nie może się uruchomić, ponieważ na komputerze brakuje libpq.dll

  5. Zmienna globalna oparta na sesji w procedurze składowanej Postgresql?