PostgreSQL pgdb驱动程序引发“无法回滚”异常

2024-10-01 15:30:05 发布

您现在位置:Python中文网/ 问答频道 /正文

由于某些原因,当我尝试在以下上下文中回滚事务时,我遇到了操作错误:“无法回滚”消息:

try:
    cursors[instance].execute("lock revision, app, timeout IN SHARE MODE")
    cursors[instance].execute("insert into app (type, active, active_revision, contents, z) values ('session', true, %s, %s, 0) returning id", (cRevision, sessionId))
    sAppId = cursors[instance].fetchone()[0]
    cursors[instance].execute("insert into revision (app_id, type) values (%s, 'active')", (sAppId,))
    cursors[instance].execute("insert into timeout (app_id, last_seen) values (%s, now())", (sAppId,))
    connections[instance].commit()
except pgdb.DatabaseError, e:
    connections[instance].rollback()
    return "{status: 'error', errno:4, errmsg: \"%s\"}"%(str(e).replace('\"', '\\"').replace('\n', '\\n').replace('\r', '\\r'))

使用的驱动程序是PGDB。在

这里有什么根本错误?在


Tags: instanceidappexecutetype错误timeoutrevision
3条回答

你找错地方了。PostgreSQL日志对您正在做什么有何说明?在

你从哪里开始交易?我确实看到了一个提交,但没有看到开始或启动事务。在

如果排除lock语句会发生什么情况?在

这就是里面发生的事pgdb.py公司公司名称:

def rollback(self):
    """Roll back to the start of any pending transaction."""
    if self._cnx:
        if self._tnx:
            self._tnx = False
            try:
                self._cnx.source().execute("ROLLBACK")
            except Exception:
                raise OperationalError("can't rollback")
    else:
        raise OperationalError("connection has been closed")

因此,我建议您将connections[instance].rollback()呼叫替换为:

^{pr2}$

看看这是否会给您一个信息更丰富的错误消息(pgdb中的except子句是greedy)。在

另外:请查看Postgresql日志,它可能会记录原因!在

相关问题 更多 >

    热门问题