Nun, die Frage fasst es ziemlich zusammen. Meine db-Aktivität ist sehr update-intensiv, und ich möchte eine Vakuumanalyse programmatisch ausgeben. Ich bekomme jedoch einen Fehler, der besagt, dass die Abfrage nicht innerhalb einer Transaktion ausgeführt werden kann. Gibt es einen anderen Weg, es zu tun?Ist es möglich, ein "VACUUM ANALYZE <tablename>" von psycopg2 oder sqlalchemy für PostgreSQL auszustellen?
Antwort
Dies ist ein Fehler in der Python DB-API: es startet eine Transaktion für Sie. Es sollte das nicht tun; ob und wann eine Transaktion gestartet werden soll, sollte dem Programmierer überlassen werden. Low-Level-Core-APIs wie diese sollten den Entwickler nicht babysitten und Dinge wie das Starten von Transaktionen hinter unserem Rücken erledigen. Wir sind große Jungs - wir können selbst Transaktionen starten, danke.
Mit psycopg2 können Sie dieses unglückliche Verhalten mit einer API-Erweiterung deaktivieren: Anruf connection.autocommit()
. Dafür gibt es leider keine Standard-API. Daher müssen Sie auf nicht standardmäßige Erweiterungen angewiesen sein, um Befehle auszuführen, die außerhalb einer Transaktion ausgeführt werden müssen.
Keine Sprache ist ohne ihre Warzen, und dies ist einer von Pythons. Das hat mich auch schon mal angesteckt.
nur ein Kommentar, dass 'connection.autocommit' ist ein boolesches Attribut, keine Funktion. Um Abfragen außerhalb einer Transaktion auszuführen, können Sie vor dem Ausführen von VACUUM 'connection.autocommit = True 'festlegen –
Sie können einschalten Postgres autocommit
Modus SQLAlchemy des raw_connection (die Sie geben eine "rohe" psycopg2 Verbindung): [? PostgreSQL - wie VACUUM von Code außerhalb Transaktionsblock laufen]
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. PostgreSQL Long VACUUM
- 2. psycopg2: Wie Vakuum postgresql Abfrage in Python-Skript ausführen
- 3. Wie lege ich die Transaktionsisolationsstufe in SQLAlchemy für PostgreSQL fest?
- 4. Python-PostgreSQL psycopg2 Schnittstelle -> Executemany
- 5. SQLAlchemy + PostgreSQL + PG regex
- 6. Ist es möglich, eine data.table von PostgreSQL zu lesen?
- 7. SQLAlchemy/Flask/PostgreSQL Pool Verbindung
- 8. Python psycopg2 nicht Einfügen in Postgresql-Tabelle
- 9. Tabellen oft benötigen VACUUM in pgAdmin
- 10. Analyze Audio-Eingang von Mikrofon Javascript
- 11. Ist es möglich, mongodb mit sqlalchemy zu verwenden?
- 12. IN-Klausel mit ganzen Zahlen in sqlalchemy/psycopg2
- 13. Ist es möglich, Daten an PostgreSQL-Trigger zu übergeben?
- 14. Pass Spaltenname als Parameter PostgreSQL mit psycopg2
- 15. ist es möglich, Oracle-Partitionierung mit SQLAlchemy oder anderen ORM-Tools zu emulieren?
- 16. Ist es möglich, eine Sperre in PostgreSQL automatisch zu lösen?
- 17. Erstellen einer postgresql DB mit psycopg2
- 18. Ist es möglich, eine Abhängigkeit zwischen PostgreSQL-Funktionen zu finden?
- 19. Ist es möglich, ein Array von hstore in PostgreSQL zu haben
- 20. Ist es möglich, Modul für String oder Symbol dynamisch zuzugreifen?
- 21. sqlalchemy BC Termine mit postgresql
- 22. Installation von psycopg2 (postgresql) in virtualenv auf Windows
- 23. Wie psycopg2 Parameter für ein Array für Zeitstempel (Datumsangaben) angeben
- 24. PostgreSQL: Ist es möglich, Enumeration in Ganzzahl umzuwandeln?
- 25. Flask-SQLAlchemy verwendet SQLite-Datenbank, obwohl es für PostgreSQL konfiguriert ist
- 26. Analyze "whistle" Sound für Tonhöhe/Note
- 27. Ist in SQLAlchemy mehrstufiger Polymorphismus möglich?
- 28. Importieren von JSON-Datendatei in PostgreSQL mit Python und Psycopg2
- 29. sqlalchemy postgresql enum erstellt keinen Typ auf db migrieren
- 30. Ist es möglich, ein Skript für eine node.js-Abhängigkeit auszuführen?
möglich Duplikat (http://stackoverflow.com/questions/1017463/postgresql-how-to-run-vacuum-from-code-outside-transaction-block) –
Danke, es ist ein Duplikat. Wie kann ich es als eins markieren? – donatello