Eu uso o PostgreSQL 9.2 e não uso bloqueio explícito em nenhum lugar, nem LOCK
instrução nem SELECT ... FOR UPDATE
. No entanto, recentemente eu tenho ERROR: 40P01: deadlock detected
. A consulta onde o impasse foi detectado é agrupada no bloco de transação. De qualquer forma, como assim?
relate perguntas
-
Posso ativar o PITR depois que o banco de dados foi usado
-
Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo
-
Os procedimentos armazenados impedem a injeção de SQL?
-
Sequências Biológicas do UniProt no PostgreSQL
-
Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?
Suponha que a sessão 1 faça:
e ao mesmo tempo, a sessão 2 faz o oposto:
Então a sessão 1 estará esperando que a sessão 2 confirme ou reverta a atualização na linha onde pk = 2 enquanto ao mesmo tempo a sessão 2 estará esperando que a sessão 1 confirme ou reverta a atualização na linha onde pk = 1. Deadlock .