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

Responder a