Eu li Entender profundamente os níveis de isolamento e Ler fenômenos no MySQL e PostgreSQL e especialmente a parte "Anomalia de serialização no Postgres". Acho que entendi o problema descrito lá, mas tenho dificuldade em julgar quando isso pode acontecer na minha aplicação.
Só é possível com funções agregadas como SUM/COUNT obter uma anomalia de serialização no Postgres? Se não, com o que mais devo ficar atento?
Há um exemplo atribuído a Jim Gray.
Existem duas linhas no banco de dados. Um tem o valor "branco" e o outro "preto". A transação T1 atualiza todo branco para preto, T2 todo preto para branco.
Cada transação lê exatamente uma linha e grava essa mesma linha. Os conjuntos de trabalho de cada transação são completamente disjuntos. Sob controle de simultaneidade pessimista, não precisa haver nenhum conflito de bloqueio. Sob otimista, não há conflito de conjunto de gravação.
Para ser serializável, devemos terminar com todos os valores brancos ou todos pretos. Se executado simultaneamente em isolamento inferior, no entanto, podemos terminar com as linhas trocando valores.