我正在使用psycopg2从Python访问postgresql表。我是从几个过程中做这件事的。我一直在使用序列化事务隔离来维护数据的完整性。我在更新/插入时检查是否存在TransactionRollback异常,然后再试一次,直到进程通过为止。在执行此操作时,我遇到了许多错误(以current transaction is aborted, commands ignored until end of transaction block的形式)。超过一半的数据已成功写入数据库,其余数据由于上述错误(发生在所有试图写入的进程中)而失败。
我是否以正确的方式使用Python和psycopg2来实现postgresql并发/事务隔离?另一种方式:使用postgresql序列化事务隔离,同时从多个独立进程访问表是否可以接受?
发布于 2015-07-31 00:29:13
根据猜测,您将捕获连接异常,但不会在基础的ROLLBACK连接上发出conn.rollback()或PostgreSQL。因此,连接仍然有一个打开的中止事务。
需要理解的关键是,捕获psycopg2异常不会在底层连接上发出回滚。它被PostgreSQL标记为中止,并且在 on the connection之前无法处理新的工作。
https://stackoverflow.com/questions/31735765
复制相似问题