Tenemos una aplicación basada en web. Hay operaciones de base de datos con plazos (INSERTs y UPDATE) en la aplicación que tardan más en completarse, por lo que este flujo particular se ha cambiado a Java Thread para que no espere (bloquee) para que se complete la operación completa de la base de datos.Error de interbloqueo en la instrucción INSERT
Mi problema es, si hay más de 1 usuario llega a través de este flujo en particular, que se me presentan el siguiente error lanzada por 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.
El error anterior se tira constantemente en las instrucciones INSERT.
Información adicional: 1) Tengo la CLAVE PRIMARIA definida en esta tabla. 2) Hay referencias de LLAVE EXTRAÑA en esta tabla. 3) Se pasa una conexión de base de datos separada a cada subproceso de Java.
Tecnologías Servidor Web: Tomcat v6.0.10 Java Servlet v1.6.0 Base de datos: PostgreSQL v8.2.3 gestión de conexión: pgpool II
La información adicional sería útil para diagnosticar su problema. ¿Podría proporcionar restricciones de clave foránea ESPECÍFICAS, alguna información básica sobre el esquema de la tabla y las sentencias SQL reales que causan el interbloqueo? –