Anbei ein Beispiel mit Rollback (gekürzt)
Code: Alles auswählen
try:
myCursor.execute(sqlQuery, params)
...
db.commit()
except Exception, e:
self.log.error ("Error executing SQL Statement \n ( %s ) \n %s" %
(sqlQuery, e))
db.rollback();
try:
db.close()
except Exception, err:
self.log.warning('ERROR: %s\n' % str(err))
An sich wäre interessant, ob der Fehler rekonstruierbar ist. D.h. passiert er z.b. immer bei den gleichen Daten?
Ansonsten könnte es sein, wenn mehrere Threads simultan auf die Datenbank zugreifen, sich vielleicht gegenseitig
blockieren. Sollte aber an sich aufgrund Transaktionssicherheit bei postgres kein Problem sein, wenn sql Transaktionen
korrekt abgeschlossen (commit, close) werden?
psycopg2.InternalError: current transaction is aborted, commands ignored until end of transaction block
Klingt für mich zumindest danach, das während der Ausführung einer Transaktion eine Andere "reinfunkt" (Thema Lost-Update Problem). Besonders bei dem Befehl .execute weiß man ja nicht ob es sich um einen select oder update handelt und so standardmässig abgebrochen wird, könnt ich mir zumindest vorstellen.