GARANTIR DESCONTO

Fórum Como posso dar Lock em uma row? #26705

02/04/2007

0

Olá!
Preciso que o Postgresql de alguma forma controle para mim o seguinte:
- se der um select de 1 chave, as linhas retornadas não poderão sofrer update ou delete por outro usuário, a não ser que o usuário que deu select nelas dê update ou delete nestas chaves.

Pelo que já li existe o comando LOCK que é usado dentro de uma TRANSACTION mas ainda não echerguei muito bem se com isso dá para fazer o que preciso.

Alguém tem alguma idéia?


Iazzetti

Iazzetti

Responder

Posts

23/04/2007

Iazzetti

Consegui, usando o comando

SELECT * FROM compels.teste WHERE a0 = ´1´ FOR UPDATE;


dentro de uma transação, ex:


BEGIN;
SELECT * FROM compels.teste WHERE a0 = ´1´ FOR UPDATE;
.
.
.
COMMIT;



se tentarmos em outra conexão com o mesmo banco dar UPDATE na(s) linha(s) retornadas por aquele select, Ex:

UPDATE compels.teste SET a1 = ´teste2´ WHERE id = ´1´;


o update ficaria preso até o COMMIT da transação com o select ser executado.

E se fizermos o select com [b:f60ad703af]NOWAIT[/b:f60ad703af] no final:

BEGIN;
SELECT * FROM compels.teste WHERE id = ´1´ FOR UPDATE NOWAIT;
.
.
.
COMMIT;


e tentarmos um:

UPDATE compels.teste SET a1 = ´teste2´ WHERE id = ´1´;


em outra conexão com o mesmo banco, o resultado agora seria um erro no banco.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar