É 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

Responder a