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

Responder a