É uma alternativa, apesar de eu não gostar muito dela, pois sou a favor da delegação de responsabilidades. Neste caso, transação de banco ser de responsabilidade do banco... Delegando controle transacional para a aplicação podemos incorrer em falhas já corrigidas no banco, além de outros transtornos, como tornar muito complexa a implementação de código, muitas vezes desnecessariamente (e antes que me leve a mal, não estou falando no teu caso, pois nem conheço o problema).
Mas como dito anteriormente, e uma das coisas que acho mais bacana na área de TI é que pra cada caso uma solução. Att, -- Charly Frankl http://javadevilopers.blogspot.com/ charlyfra...@gmail.com Linux user #391083 2009/8/12 mateusgra <mateus...@bol.com.br> > > Resolvi esse problema na aplicação. Em Java por exemplo vc pode fazer um > filter onde so vai dar o commit qdo toda a transação for terminada. > E se vc for mais alem pode até esperar o subimit do cliente. > > Seguindo o exemplo da compra online ele so atualizaria o saldo e o estoque > se o cliente confirmasse toda a compra. > > > MIGUEL JOSE DE LIMA wrote: > > > > Caros, participantes... > > Sou iniciante neste mundo do PostgreSQL. > > Trabalho com outro Banco de Dados - ADABAS (UNIX SOLARIS/MAINFRAME), > > mas me incubiram de fazer testes no PostgreSQL para bloquer registros. > > Então... > > > > Estou precisando de ajuda para bloquear a leitura de um registro, ou > seja, > > em um cenário como: > > "Atualização de Estoque de um Material" : > > Antes de atualizar o estoque do material selecionado eu preciso bloquear > o > > registro para que > > nenhuma outra sessão possa obter o dado do registro. > > PRECISO DE UMA LEITURA EXCLUSIVA - TOTALMENTE RESTRITIVA. > > Estou usando o PostgreSQL 8.3.7 para os testes - em linux > > Já li e reli sobre o Isolamento de Transação, mas pode ser que eu não > > esteja > > entendendo...??? > > Fiz o seguinte teste via psql: > > - Na Sessão "A" > > db_teste=# BEGIN WORK; > > BEGIN > > db_teste=# LOCK TABLE tab_material IN ROW EXCLUSIVE MODE NOWAIT; > > LOCK TABLE > > db_teste=# SELECT * FROM tab_material where codg_serma='10' FOR UPDATE; > > resultado obtido ok! > > *** aqui eu preciso bloquear todos os materiais/itens (de um pedido) - > > como ex. fiz de apenas 1 (um). > > > > - Na Sessão "B": > > ** Fiz o mesmo SELECT sem a clausula FOR UPDATE: > > SELECT * FROM tab_material where codg_serma='10' > > > > ** aqui eu obtive o resultado ok da leitura. > > Portanto, é aqui, neste ponto que não deveria permitir nenhuma > > leitura, > > já que sessão "A" ainda não terminou! > > E AI ALGUÉM PODE ME AJUDAR!? > > > > Obrigado! > > > > _______________________________________________ > > pgbr-geral mailing list > > pgbr-geral@listas.postgresql.org.br > > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > > > > > > -- > View this message in context: > http://www.nabble.com/BLOQUEIO-DE-REGISTRO-tp24923152p24937028.html > Sent from the PostgreSQL - Brasil mailing list archive at Nabble.com. > > _______________________________________________ > pgbr-geral mailing list > pgbr-geral@listas.postgresql.org.br > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral >
_______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral