Olá, Leandro

Acho que você resumiu bem a questão. Apenas um comentário, quando falei do
PostgreSQL é que estamos falando do PostgreSQL, porém concordo com você que
o conceito é de SQL e não especificamente do PostgreSQL. Derrepente não me
expressei bem.

2009/8/11 Leandro Henrique Pereira Neto <
leandro-henrique.pere...@serpro.gov.br>

>  Pelo que conheço não é uma questão do PostgreSQL e sim de bancos padrão
> SQL, pelo menos nos mais populares (SqlServer, Oracle, MySQL, PostgreSQL e
> DB2).
>
> O SELECT "simples" nunca é bloqueado (somente se usar for update).
> Porém usar todos os SQL com FOR UPDATE pode travar todo o seu sistema
> rapidinho já que somente uma transação poderá ler os dados de cada vez, como
> em sistema OLTP temos normalmente mais leitura do que alteração a coisa
> acaba ficando complicada.
>
> O que tem são os conceitos de transação e de consistência de leitura.
>
> Talvez seja o caso de você pensar o sistema em temos de bancos SQL e não
> tentar fazer no PostgreSQL o que um banco como o Adabas faz pois estruturas
> de funcionamento e implementação totalmente diferentes.
>
> Leandro Henrique Pereira Neto
> Administração de bancos de dados
>
>
>
>
> Charly Frankl escreveu:
>
> 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 <jota.c...@gmail.com>
>
>> 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 <mig...@inlocsistemas.com.br>
>>
>>> 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
>>>
>>>
>>
>> []s
>> --
>> JotaComm
>> http://jotacomm.wordpress.com
>> http://www.dextra.com.br/postgres
>>
>> _______________________________________________
>> pgbr-geral mailing list
>> pgbr-geral@listas.postgresql.org.br
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>>
>
>
> --
> Charly Frankl
> http://javadevilopers.blogspot.com/
> charlyfra...@gmail.com
> Linux user #391083
>
> ------------------------------
>
> _______________________________________________
> pgbr-geral mailing 
> listpgbr-ge...@listas.postgresql.org.brhttps://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>  "Esta mensagem do SERVIÇO FEDERAL DE PROCESSAMENTO DE DADOS (SERPRO), 
> empresa pública federal regida pelo disposto na Lei Federal nº 5.615, é 
> enviada exclusivamente a seu destinatário e pode conter informações 
> confidenciais, protegidas por sigilo profissional. Sua utilização 
> desautorizada é ilegal e sujeita o infrator às penas da lei. Se você a 
> recebeu indevidamente, queira, por gentileza, reenviá-la ao emitente, 
> esclarecendo o equívoco."
>
> "This message from SERVIÇO FEDERAL DE PROCESSAMENTO DE DADOS (SERPRO) -- a 
> government company established under Brazilian law (5.615/70) -- is directed 
> exclusively to its addressee and may contain confidential data, protected 
> under professional secrecy rules. Its unauthorized use is illegal and may 
> subject the transgressor to the law's penalties. If you're not the addressee, 
> please send it back, elucidating the failure."
>
>
> _______________________________________________
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> 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
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Reply via email to