Обсуждение: WARNING: there is already a transaction in progress
"""
Engages the lock
@return: None
"""
log.info("mutex lock %d" % self.locked)
if not self.locked:
cur = self.conn.cursor()
log.info("mutex start tran")
self.locked = True
try:
cur.execute('BEGIN TRANSACTION; LOCK TABLE "%s" IN EXCLUSIVE MODE;' % self.table)
except:
log.info("mutex tran failed")
log.exception()
raise
else:
log.info("mutex tran started")
cur.close()
del cur
def unlock(self):
"""
Releases the lock
@return: None
"""
log.info("mutex unlock %d" % self.locked)
if self.locked:
try:
cur = self.conn.cursor()
except:
log.exception()
raise
log.info("mutex end trans")
self.locked = False
cur.execute("END TRANSACTION")
log.info("mutex trans ended")
cur.close()
del cur
InterfaceError: ('25001', -1, 'WARNING: there is already a transaction in progress', 8489)
- File "/Users/user/ana/ana/srv/orm/driver.py", line 100, in execute
[0m[31m14:58:53.862 0.0.0.0 {unknown} - Query to execute: BEGIN TRANSACTION; LOCK TABLE "Sys_sequencer" IN EXCLUSIVE MODE; - File "/Users/user/ana/ana/srv/orm/driver.py", line 101, in execute
Lep pozdrav,
Dear support,I am using these software with your psqlodbc driver:unixODBC: 2.3.2.ODBC psqlodbc driver: http://www.postgresql.org/ftp/odbc/versions/src/ (latest) - psqlodbc-09.03.0300.tar.gzOSX version: 10.9.3UCS: UCS2Eclipse: Eclipse Standard/SDK - Kepler Service Release - Build id: 20140224-0627Python: 2.7.6mxBase version: egenix-mx-base-3.2.6-py2.7_ucs2-macosx-10.4-fat-prebuiltmxODBC version: egenix-mxodbc-3.1.2.macosx-10.4-fat-py2.7_ucs2.prebuilt-----------------I am getting error "WARNING: there is already a transaction in progress" when trying to execute command "BEGIN TRANSACTION; LOCK TABLE "%s" IN EXCLUSIVE MODE;'"We have written mutex which is working on other systems to unlock and lock database table using pgsql-odbc driver. Is that possible that transaction is ran automatically by driver or when "cur = self.conn.cursor()" is executed ? Has anyone else experienced that issue?-----------------Python code:def lock(self):"""
Engages the lock
@return: None
"""
log.info("mutex lock %d" % self.locked)
if not self.locked:
cur = self.conn.cursor()
log.info("mutex start tran")
self.locked = True
try:
cur.execute('BEGIN TRANSACTION; LOCK TABLE "%s" IN EXCLUSIVE MODE;' % self.table)
except:
log.info("mutex tran failed")
log.exception()
raise
else:
log.info("mutex tran started")
cur.close()
del cur
def unlock(self):
"""
Releases the lock
@return: None
"""
log.info("mutex unlock %d" % self.locked)
if self.locked:
try:
cur = self.conn.cursor()
except:
log.exception()
raise
log.info("mutex end trans")
self.locked = False
cur.execute("END TRANSACTION")
log.info("mutex trans ended")
cur.close()
del cur
Python error:InterfaceError: ('25001', -1, 'WARNING: there is already a transaction in progress', 8489)
- File "/Users/user/ana/ana/srv/orm/driver.py", line 100, in execute
[0m[31m14:58:53.862 0.0.0.0 {unknown} - Query to execute: BEGIN TRANSACTION; LOCK TABLE "Sys_sequencer" IN EXCLUSIVE MODE; - File "/Users/user/ana/ana/srv/orm/driver.py", line 101, in execute
SQL ODBC log: https://dl.dropboxusercontent.com/u/17952943/sql.logSQL ODBC warning in log:Statement = 0x100a0fa00SQL = [BEGIN TRANSACTION; LOCK TABLE "Sys_sequencer" IN EXCLUSIVE MODE;][length = 64][ODBC][20715][1405083533.616254][SQLExecDirect.c][503]Exit:[SQL_SUCCESS_WITH_INFO]DIAG [25001] WARNING: there is already a transaction in progress(BEGIN TRANSACTION; LOCK TABLE "Sys_sequencer" IN EXCLUSIVE MODE; is called three times one afteranother without unlock)--
Lep pozdrav,Matevž Mrak
Lep pozdrav,
matevzm wrote > I am getting error *"WARNING: there is already a transaction in progress"* > when trying to execute command "*BEGIN TRANSACTION; LOCK TABLE "%s" IN > EXCLUSIVE MODE;'"* > > We have written mutex which is working on other systems to unlock and lock > database table using pgsql-odbc driver. Is that possible that transaction > is ran automatically by driver or when "*cur *=* self.conn.cursor*()" is > executed ? Has anyone else experienced that This is exactly what is happening. You are being warned (not a failure) that you are issuing BEGIN after the driver has issued BEGIN. The ODBC driver provides the user the option to auto commit or not but fundamentally in ODBC you are always in a transaction. The lack of warnings by other drivers is the probable reason you haven't noticed your redundancy until now. David J. -- View this message in context: http://postgresql.1045698.n5.nabble.com/WARNING-there-is-already-a-transaction-in-progress-tp5811280p5811288.html Sent from the PostgreSQL - odbc mailing list archive at Nabble.com.