Eu tenho duas mesas. Uma é uma tabela de log; outro contém, essencialmente, códigos de cupom que só podem ser usados uma vez.
O usuário precisa poder resgatar um cupom, que inserirá uma linha na tabela de log e marcará o cupom como usado (atualizando a used
coluna para true
).
Naturalmente, há um problema óbvio de condição/segurança de corrida aqui.
Eu fiz coisas semelhantes no passado no mundo do mySQL. Nesse mundo, eu bloquearia ambas as tabelas globalmente, faria a lógica com segurança sabendo que isso só poderia acontecer uma vez por vez e, em seguida, desbloquearia as tabelas assim que terminasse.
Existe uma maneira melhor no Postgres de fazer isso? Em particular, estou preocupado que o bloqueio seja global, mas não precisa ser - eu realmente só preciso ter certeza de que ninguém mais está tentando inserir esse código específico, então talvez algum bloqueio em nível de linha funcione?