Erro de deadlock na instrução INSERT

Nós temos um aplicativo baseado na web. Há operações de banco de dados com limite de tempo (INSERTs e UPDATEs) no aplicativo que levam mais tempo para serem concluídas, portanto, esse fluxo específico foi alterado para um Thread Java, portanto, ele não aguardará (bloco) pela conclusão da operação completa do banco de dados.

Meu problema é, se mais de um usuário se deparar com esse fluxo específico, estou enfrentando o seguinte erro lançado pelo 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.

O erro acima é lançado de forma consistente nas instruções INSERT.

Informação adicional: 1) Eu tenho PRIMARY KEY definido nesta tabela. 2) Existem referências para a FOREIGN KEY nesta tabela. 3) Conexão de banco de dados separada é passada para cada Thread Java.

Tecnologias Servidor Web: Tomcat v6.0.10 Banco de dados do Servlet Java v1.6.0: Gerenciamento de Conexão do PostgreSQL v8.2.3: pgpool II

questionAnswers(4)

yourAnswerToTheQuestion