【发布时间】:2010-12-03 23:22:15
【问题描述】:
我们有一个基于网络的应用程序。应用程序中有时间限制的数据库操作(插入和更新)需要更多时间才能完成,因此该特定流程已更改为 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 线程。
技术 网络服务器:Tomcat v6.0.10 Java v1.6.0 小服务程序 数据库:PostgreSQL v8.2.3 连接管理:pgpool II
【问题讨论】:
-
其他信息将有助于诊断您的问题。您能否提供具体的外键约束、有关表模式的一些基本信息以及导致死锁的实际 SQL 语句?
标签: sql postgresql database-deadlocks