Cristiano,

Ah sim, eh que pela pergunta do Osvaldo e pela sua resposta pensei que 
seria eternamente!

A uns 6 meses atrás tivemos um problema semelhante e optamos por 
resolver sem o Lock. Utilizamos um controle melhorado da transação e um 
gerenciamento de seções em um trigger. Está funcionando legal. Mas nossa 
arquitetura é bem diferente do que se vê por ai, não sei se resolveria 
seu problema.

Dê uma olhada aqui http://pgdocptbr.sourceforge.net/pg80/mvcc.html, acho 
que o ITEM 12.3.2 é o que deseja! Tenha muito cuidado com DeadLock!

Abaixo o exemplo da Trigger que bloqueia UPDATE na tabela

CREATE OR REPLACE FUNCTION ft_teste () RETURNS trigger AS
'BEGIN
    RETURN NULL; -- O retorno NULL faz com que o commit nao se efetive!
END; '
LANGUAGE 'plpgsql';

CREATE TRIGGER tr_bu_teste
     BEFORE UPDATE ON tabela_teste FOR EACH ROW
     EXECUTE PROCEDURE ft_teste();

Você pode alterar o return null por um Raise Exception e estourar uma 
mensagem de erro!

[]'s

Evandro

Cristiano Panvel wrote:
> Evandro, na verdade nao precissaria ficar eternamente com o lock,
> seria ate o usuario excutar o encerramento do pedido, depois esse dado
> nao aparece mais na sua tela, mais o dado pode ficar entre 1 a dois
> dias na tela.
>
> Mais se puder manda um exemplo aí, eu agradeço.
>
> Cristiano.
>
> On 1/12/07, Evandro Ricardo Silvestre <[EMAIL PROTECTED]> wrote:
>   
>> Isso que você está querendo fazer é um pouco inseguro.
>> Os locks feitos no banco ficam até o servidor ser reiniciado ou até
>> estourar algum erro de DeadLock, a partir disso os registros são liberados.
>>
>> Não sei se existe alguma forma de fazer no Postgresql que um Lock fique
>> eternamente!
>>
>> Eu faria uma Trigger Before Update que impossibilitaria a edição do
>> registro. O que acha? Acho mais confiável que usar Lock, pelo menos
>> dessa forma você tem o controle sobre o registro!
>>
>> Se você optar pela trigger posso escrever um exemplo.
>>
>> Att.
>>
>> Evandro
>>
>> Cristiano Panvel wrote:
>>     
>>> Sim é isso mesmo Osvaldo. Eu lembro que em DB2 da IBM era possivel
>>> fazer isso mais ja nao lembro mais nem como fazia, ja faz muito tempo.
>>>
>>> Cristiano
>>>
>>> On 1/11/07, Osvaldo Kussama <[EMAIL PROTECTED]> wrote:
>>>
>>>       
>>>> Cristiano Panvel <[EMAIL PROTECTED]> escreveu:
>>>>  pessoal, existe alguma forma no postgresql, de eu efetuar um lock no
>>>> registro, por exemplo:
>>>> o usuario alterou um determinado dado X, e ele nao pode mais alterar o
>>>> dado novamente, gostaria de saber se posso controlar isso pelo banco e
>>>> nao pela aplicacao em si.
>>>>
>>>>
>>>>
>>>> Vamos ver se entendi: eu sou um usuário do bd e alterei um determinado 
>>>> campo
>>>> de um registro de uma tabela, portanto nunca mais vou poder alterar este
>>>> mesmo campo deste registro. É isso? Mesmo que daqui a um mês, um ano?
>>>> Qualquer outro usuário pode alterar este mesmo campo mas a partir daí entra
>>>> na regra da proibição?
>>>>
>>>> Se for isso creio que terá que implementar em sua aplicação. *EU* não
>>>> conheço nada parecido no PostgreSQL.
>>>>
>>>> Se entendi errado por favor explique-se melhor.
>>>>
>>>> []s
>>>> Osvaldo
>>>>
>>>>
>>>>
>>>>  __________________________________________________
>>>> Fale com seus amigos de graça com o novo Yahoo! Messenger
>>>> http://br.messenger.yahoo.com/
>>>> _______________________________________________
>>>> Grupo de Usuários do PostgreSQL no Brasil
>>>> Antes de perguntar consulte o manual
>>>> http://pgdocptbr.sourceforge.net/
>>>>
>>>> Para editar suas opções ou sair da lista acesse a página da lista em:
>>>> http://pgfoundry.org/mailman/listinfo/brasil-usuarios
>>>>
>>>>
>>>>
>>>>         
>>> _______________________________________________
>>> Grupo de Usuários do PostgreSQL no Brasil
>>> Antes de perguntar consulte o manual
>>> http://pgdocptbr.sourceforge.net/
>>>
>>> Para editar suas opções ou sair da lista acesse a página da lista em:
>>> http://pgfoundry.org/mailman/listinfo/brasil-usuarios
>>>
>>>
>>>
>>>       
>> _______________________________________________
>> Grupo de Usuários do PostgreSQL no Brasil
>> Antes de perguntar consulte o manual
>> http://pgdocptbr.sourceforge.net/
>>
>> Para editar suas opções ou sair da lista acesse a página da lista em:
>> http://pgfoundry.org/mailman/listinfo/brasil-usuarios
>>
>>     
> _______________________________________________
> Grupo de Usuários do PostgreSQL no Brasil
> Antes de perguntar consulte o manual
> http://pgdocptbr.sourceforge.net/
>
> Para editar suas opções ou sair da lista acesse a página da lista em:
> http://pgfoundry.org/mailman/listinfo/brasil-usuarios
>
>
>   

_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/

Para editar suas opções ou sair da lista acesse a página da lista em:
http://pgfoundry.org/mailman/listinfo/brasil-usuarios

Responder a