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

The right way to use postgresql with concurrent processes

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

我使用 Python 和 psycopg2 处理 postgresql 并发/事务隔离的方法是否正确?换句话说:是否acceptable使用postgresql序列化事务隔离,同时从多个单独的进程访问table?

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

要理解的关键是捕获 psycopg2 异常 而不是 对底层连接发出回滚。它被 PostgreSQL 标记为中止,并且在您 issue a ROLLBACK on the connection.

之前无法处理新工作