Quero um determinado comportamento para transações no Postgresql, mas não sei dizer se é possível. Eu descreveria esse comportamento como “Bloqueio de leitura otimista”, mas esse não parece ser o termo certo para isso.
Aqui está o comportamento que eu quero:
- Minha transação começa. Seu nível de isolamento de transação é “leitura repetível” ou “serializável”.
- Na transação eu li a linha A.
- Na transação, leio e escrevo mais um pouco, mas nunca atualizo a linha A.
- Tento confirmar a transação.
Agora preciso que a transação falhe, se a linha A tiver sido alterada por alguma outra transação durante o tempo de vida da minha transação. Se a linha A não foi alterada, desejo que a transação seja confirmada.
Existe uma maneira de fazer isso no Postgresql?
Minha abordagem alternativa seria atualizar a linha A com algum valor aleatório na minha transação, para forçar um conflito de gravação. No entanto, isso significaria muitos conflitos desnecessários, porque sem forçar conflitos, a linha A raramente seria atualizada, mas frequentemente lida.