Bom Dia! Charly, me desculpe mas não consta um email seu anterior, mas pelo que vc descreveu agora, conicide com minha primeira postagem, ou seja, eu utilizei o LOCK ... NOWAIT e SELECT ... FOR UPDATE! Mas ficaria agradecido se vc enviasse o exemplo novamente. Obrigado!
2009/8/11 Charly Frankl <[email protected]> > Miguel, boa noite... > > Para você bloquear os selects, faça todos com FOR UPDATE ... Ai você tem > opções, onde para retornar logo que está "ocupado" utilize NOWAIT. > > Att, > > > 2009/8/11 JotaComm <[email protected]> > >> Olá, Miguel >> >> Já comentei no email anterior e fiz uma pequena descrição de como isso >> funciona. Você deu uma olhada no exemplo que mandei? >> >> O PostgreSQL não bloqueia a leitura (SELECT), apenas operações de escrita >> (UPDATE e DELETE). >> >> >> 2009/8/11 MIGUEL JOSE DE LIMA <[email protected]> >> >>> 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 <[email protected]> >>> >>> 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 >>>> > [email protected] >>>> > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral >>>> > >>>> >>>> _______________________________________________ >>>> pgbr-geral mailing list >>>> [email protected] >>>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral >>>> >>> >>> >>> _______________________________________________ >>> pgbr-geral mailing list >>> [email protected] >>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral >>> >>> >> >> []s >> -- >> JotaComm >> http://jotacomm.wordpress.com >> http://www.dextra.com.br/postgres >> >> _______________________________________________ >> pgbr-geral mailing list >> [email protected] >> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral >> >> > > > -- > Charly Frankl > http://javadevilopers.blogspot.com/ > [email protected] > Linux user #391083 > > _______________________________________________ > pgbr-geral mailing list > [email protected] > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > >
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
