我们有一个基于网络的应用程序。应用程序中有时间限制的数据库操作(插入和更新)需要更多时间才能完成,因此这个特定的流程已更改为 Java 线程,因此它不会等待(阻塞)完成完整的数据库操作。
我的问题是,如果超过 1 个用户遇到此特定流程,我将面临 PostgreSQL 引发的以下错误:
org.postgresql.util.PSQLException: ERROR: deadlock detected
Detail: Process 13560 waits for ShareLock on transaction 3147316424; blocked by process 13566.
Process 13566 waits for ShareLock on transaction 3147316408; blocked by process 13560.
上述错误始终在 INSERT 语句中引发。
附加信息: 1)我在此表中定义了 PRIMARY KEY。2) 此表中有 FOREIGN KEY 引用。3) 将单独的数据库连接传递给每个 Java 线程。
技术 Web 服务器:Tomcat v6.0.10 Java v1.6.0 Servlet 数据库:PostgreSQL v8.2.3 连接管理:pgpool II