使用postgresql和并发进程的正确方法

时间:2015-07-30 23:31:23

标签: python postgresql psycopg2

我正在使用psycopg2从Python访问postgresql表。我是从几个过程中做到这一点的。我一直在使用序列化事务隔离来维护数据的完整性。我通过在更新/插入时检查是否存在TransactionRollback异常来执行此操作,我再次尝试直到该过程通过。我这样做时遇到很多错误(以current transaction is aborted, commands ignored until end of transaction block的形式。超过一半的数据被成功写入数据库,其余的由于上述错误而失败(在所有尝试写入的进程中都会发生。)

我是否接近使用Python和psycopg2的postgresql并发/事务隔离的正确方法?换句话说:使用postgresql序列化事务隔离,同时从多个独立进程访问表是否可以接受?

1 个答案:

答案 0 :(得分:1)

猜测,您正在捕获连接异常,但在基础PostgreSQL连接上没有发出ROLLBACKconn.rollback()。所以连接仍然有一个开放的中止事务。

要理解的关键是捕获psycopg2异常在底层连接上发出回滚。它被PostgreSQL标记为中止,在issue a ROLLBACK on the connection之前无法处理新工作。