我们有一个基于Web的应用程序。 应用程序中存在时间限制的数据库操作(INSERT和UPDATE),这些操作需要更长的时间才能完成,因此将此特定流程更改为Java线程,以便它不会等待(阻塞)完整的数据库操作完成。
我的问题是,如果超过1个用户遇到此特定流程,则PostgreSQL会抛出以下错误:
我的问题是,如果超过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.
上述错误在插入语句中持续出现。
额外信息: 1)在这张表中我定义了主键。 2)这张表中存在外键引用。 3)每个Java线程都传递了单独的数据库连接。
技术信息 Web服务器:Tomcat v6.0.10 Java v1.6.0 Servlet 数据库:PostgreSQL v8.2.3 连接管理:pgpool II