我正在使用psycopg2从Python访问postgresql表。我是从几个过程中做到这一点的。我一直在使用序列化事务隔离来维护数据的完整性。我通过在更新/插入时检查是否存在TransactionRollback异常来执行此操作,我再次尝试直到该过程通过。我这样做时遇到很多错误(以current transaction is aborted, commands ignored until end of transaction block
的形式。超过一半的数据被成功写入数据库,其余的由于上述错误而失败(在所有尝试写入的进程中都会发生。)
我是否接近使用Python和psycopg2的postgresql并发/事务隔离的正确方法?换句话说:使用postgresql序列化事务隔离,同时从多个独立进程访问表是否可以接受?
答案 0 :(得分:1)
猜测,您正在捕获连接异常,但在基础PostgreSQL连接上没有发出ROLLBACK
或conn.rollback()
。所以连接仍然有一个开放的中止事务。
要理解的关键是捕获psycopg2异常不在底层连接上发出回滚。它被PostgreSQL标记为中止,在issue a ROLLBACK
on the connection之前无法处理新工作。