Frage

Ich habe eine Sitzung (SQLAlchemy) auf PostgreSQL, mit einer aktiven nicht ausgeführten Transaktion. Ich habe gerade die übergebenen Sitzung zu einem gewissen Ruf Baum, den SQL INSERT / UPDATE / DELETE Erklärungen abgegeben hat oder auch nicht, durch sqlalchemy.orm oder direkt über die zugrundeliegende Verbindung.

Gibt es eine Möglichkeit zu überprüfen, ob es irgendwelche anstehenden Daten modifizierende Aussagen in dieser Transaktion? D. h ob zu begehen wäre ein No-op oder nicht, und ob das Rollback würde verwerfen etwas oder nicht?

weisen darauf hin, v$transaction in Oracle

Ich habe Leute gesehen für die gleiche Sache (siehe diese Frage SO ). Ich suche nach etwas ähnliches auf PostgreSQL verwenden.

War es hilfreich?

Lösung

Starten Sie durch in Systemansicht pg_locks zu überprüfen.

http://www.postgresql.org/docs/ 8.4 / interactive / view-pg-locks.html

Andere Tipps

die folgende Folge von Anweisungen vor:

select txid_current();

begin;

select txid_current();

Wenn die Transaktions-ID von den beiden wählt zurück gleich ist, dann gibt es eine offene Transaktion. Wenn nicht, dann war es nicht, (aber jetzt ist).

Wenn die Zahlen unterschiedlich sind, dann als Nebeneffekt werden Sie nur eine Transaktion geöffnet haben, die Sie wahrscheinlich schließen wollen.

UPDATE : In der Tat, wie @ r2evans weist darauf hin (! Dank für die Einsicht), müssen Sie die "begin" nicht brauchen - txid_current () die gleiche Anzahl nur zurück, wenn Sie in einer Transaktion ist.

Nein, nicht aus der Datenbank-Ebene, wirklich. Vielleicht können Sie einige Tracing am sqlalchemy Ebene hinzufügen, es zu verfolgen?

Auch, wie definieren Sie eine no-op? Was passiert, wenn Sie einen Wert auf den gleichen Wert aktualisiert, bevor es hatte, ist, dass ein nicht-op oder nicht? Aus der Datenbanken Perspektive, wenn es eine hätte, wäre es nicht ein No-op sein. Aber aus der Anwendung Sicht, wäre es wahrscheinlich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top