Cóż, to pytanie w dużym stopniu to podsumowuje. Moja aktywność db jest bardzo intensywnie aktualizowana i chcę programowo wystawić analizę próżni. Jednak pojawia się błąd, który mówi, że kwerendy nie można wykonać w ramach transakcji. Czy jest jakiś inny sposób na zrobienie tego?Czy jest możliwe wystawienie "VACUUM ANALYZE <tablename>" z psycopg2 lub sqlalchemy dla PostgreSQL?
Czy jest możliwe wystawienie "VACUUM ANALYZE <tablename>" z psycopg2 lub sqlalchemy dla PostgreSQL?
Odpowiedz
To jest błąd w Python DB-API: rozpoczyna transakcję dla ciebie. Nie powinno to robić; czy i kiedy rozpocząć transakcję powinna należeć do programisty. Niskopoziomowe, podstawowe interfejsy API, takie jak te, nie powinny opiekować się programistą i robić rzeczy, jak na przykład inicjowanie transakcji za naszymi plecami. Jesteśmy dużymi chłopcami - możemy sami rozpocząć transakcje, dziękuję.
W psycopg2 możesz wyłączyć to niefortunne zachowanie dzięki rozszerzeniu interfejsu API: zadzwoń pod numer connection.autocommit()
. Niestety, nie ma standardowego API, więc musisz polegać na niestandardowych rozszerzeniach, aby wydawać polecenia, które muszą być wykonywane poza transakcją.
Żaden język nie jest pozbawiony brodawek, a to jest język Pythona. Byłem też ukąszony przez to wcześniej.
tylko komentarz, że 'connection.autocommit' jest atrybutem boolowskim, a nie funkcją. Aby wykonać zapytania poza transakcją, można ustawić opcję 'connection.autocommit = True' przed wykonaniem ODKURZACZA –
Można włączyć Postgres trybie autocommit
użyciu SQLAlchemy na raw_connection (co daje „surowego” Połączenie psycopg2) [? PostgreSQL - jak uruchomić wodociągowe z kodem zewnętrznym bloku transakcji]
import sqlalchemy
from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT
engine = sqlalchemy.create_engine(url)
connection = engine.raw_connection()
connection.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
cursor = connection.cursor()
cursor.execute("VACUUM ANALYSE table_name")
- 1. SQLAlchemy, psycopg2 i PostgreSQL KOPIA
- 2. SQLAlchemy lub psycopg2?
- 3. PostgreSQL - jak uruchomić VACUUM z kodu poza blokiem transakcji?
- 4. Czy powinienem uruchomić VACUUM w transakcji lub po?
- 5. psycopg2 nie wykonuje funkcji PostgreSQL
- 6. SQLAlchemy i Postgresql: to_tsquery()
- 7. sqlalchemy BC daty z postgresql
- 8. psycopg2: Jak wykonać zapytanie próżniowe postgresql w skrypcie pythona
- 9. PostgreSQL: czy możliwe jest podanie niestandardowej nazwy dla PRIMARY KEY lub UNIQUE?
- 10. 'Unicode' vs. 'String' z SQLAlchemy i PostgreSQL
- 11. Błąd kodowania z sqlalchemy i postgresql
- 12. Django z wtyczką psycopg2
- 13. Typ ENUM w SQLAlchemy z PostgreSQL
- 14. Wykonaj kwerendę sql z Elixir
- 15. Czy jest możliwe utworzenie roli bazy danych na Heroku Postgresql?
- 16. Czy możliwe jest posiadanie tablicy hstore w PostgreSQL
- 17. Używanie konwertera psycopg2 do pobierania danych z bazy danych PostgreSQL
- 18. Czy możliwe jest odbijanie od <video>?
- 19. sqlalchemy postgresql enum nie tworzy typu na db migrate
- 20. , jeśli jest to możliwe z warunkiem LUB
- 21. Java - Czy ArrayList <Integer> [] [] jest możliwe?
- 22. Jak korzystać z zakresu numerycznego PostgreSQL z SQLAlchemy
- 23. Jak ustawić poziom izolacji transakcji w SQLAlchemy dla PostgreSQL?
- 24. Czy jest możliwe zapisanie Func <T> w słowniku?
- 25. Sparametryzowane zapytania za pomocą psycopg2/Python DB-API i PostgreSQL
- 26. Operator ~ <~ w PostgreSQL
- 27. psycopg2 z kolbą, kiedy zamknąć połączenie
- 28. Czy możliwe jest mieszanie dodatków z matplotlib?
- 29. Czy można bezpiecznie używać SQLalchemy z gevent?
- 30. Jak reprezentować niestandardową domenę PostgreSQL w SQLAlchemy?
możliwe duplikat (http://stackoverflow.com/questions/1017463/postgresql-how-to-run-vacuum-from-code-outside-transaction-block) –
Dzięki, to jest duplikat. Jak mogę oznaczyć to jako jedno? – donatello