Oi Mário, Este é o problema a leitura nunca é bloqueada. Fiz os testes pedidos, mas para mim não mudou nada! Veja: - Na sessão 1: db_teste=# BEGIN WORK; BEGIN db_teste=# LOCK TABLE tab_material IN ROW EXCLUSIVE MODE NOWAIT; LOCK TABLE db_teste=# UPDATE tab_material SET desc_serma = 'LAPIS Y' where codg_serma='10'; UPDATE 1 db_teste=# *** aguardando novo comando *** - Na sessão 2: db_teste=# BEGIN WORK; BEGIN db_teste=# SELECT * FROM tab_material where codg_serma='10'; codg_empr | codg_serma | id_serma | desc_serma -----------+------------+------------+------------+--------------+------ 202 | 10 | 2020000010 | LAPIS Y |
É isso ai!!!?? Obrigado. 2009/8/11 Mário Oshiro <mario.osh...@gmail.com> > Em SQLServer, fiz um teste parecido com o seu. > > Qdo vc faz um lock de registro ou trabela, ele nao bloqueia a leitura > de outras sessoes, ate' que a > sessao de posse do lock, faça um update de algum dado do registro. > > Para bloquear o select que vc fez, faca em seguida um update com a mesmo > where assim : > > db_teste=# SELECT * FROM tab_material where codg_serma='10' FOR UPDATE; > update tab_material set codg_serma='10' where codg_serma='10' ; > > teste la e depois envie o resultado. > > até mais. > > > > 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 > > > > _______________________________________________ > 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