首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL pgdb驱动程序引发“无法回滚”异常

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

Stack Overflow用户
提问于 2010-03-11 02:28:46
回答 3查看 905关注 0票数 1

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

代码语言:javascript
复制
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。

这里的根本错误是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-11 02:48:19

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

这是在pgdb.py内部发生的事情:

代码语言:javascript
复制
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()调用替换为:

代码语言:javascript
复制
connections[instance]._tnx = False
connections[instance]._cnx.source().execute("ROLLBACK")

看看这是否会给您提供更详细的错误消息( pgdb中的except子句是贪婪的)。

另外:检查Postgresql日志,它可能已经记录了原因!

票数 0
EN

Stack Overflow用户

发布于 2010-03-12 01:48:23

你找错地方了。关于您正在执行的操作,PostgreSQL日志会显示什么内容?

票数 1
EN

Stack Overflow用户

发布于 2010-03-11 02:49:48

您从哪里开始交易?我确实看到了提交,但没有看到BEGIN或START TRANSACTION。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2419500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档