Estou tentando migrar nosso banco de dados PostgreSQL 9.4 do nível de transação READ COMMITTED
para REPEATABLE READ
ou SERIALIZABLE
. Em ambos os casos, estou exposto a um novo conjunto de erros com o formato:
(for both)
ERROR: could not serialize access due to concurrent update
(just for SERIALIZABLE)
ERROR: could not serialize access due to read/write dependencies among transactions
Depois de ler a página wiki sobre SSI e os documentos , entendo completamente as condições de erro que podem causar esses erros, como lidar com eles e até mesmo as melhores práticas para evitá-los.
No entanto, não vejo como determinar a dependência de dados que os causou a partir de qualquer saída de depuração que o PostgreSQL possa fornecer ou, na verdade, de qualquer informação de depuração. Existe alguma maneira de obter essas informações do banco de dados, seja executando consultas adicionais no momento da reversão ou por meio de algum mecanismo de log?
Ter essas informações me permitiria fazer alterações no nível do aplicativo (bloqueio, consultas diferentes etc.) que eliminariam algumas corridas de dados para evitar um número excessivo de reversões.