From: | Emanuel Calvo Franco <postgres(dot)arg(at)gmail(dot)com> |
---|---|
To: | uno dos <refreegrata(at)yahoo(dot)com> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: duda con select for update |
Date: | 2009-06-18 21:37:24 |
Message-ID: | f205bb120906181437n3f6c014dudba4a3fc2fc95fbf@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
> Ahora ¿que pasa si no encuentra una fila con codigo=1?
> Pasa esto:
> 1) Ninguna otra transacción podrá insertar una fila con codigo 1, ni tampoco
> podrá
> cambiarle a otra fila el código al valor 1
>
Si es primary key , recorda que tiene la restriccion UNIQUE por lo que
no podés repetir valores (no podrán insertar valores que ya esten en la llave)
> ó pasa esto:
>
> 2) puede insertar filas con codigo 1 y también puede cambiarle el codigo a
> otra fila para dejarselo en 1.
>
> Bueno, espero puedan ayudarme
>
Para que el Select *... for update realmente funcion debe estar en una
transaccion (BEGIN - END).
En el caso que una transacción este 'bloqueando' el codigo 1 con un 'for
update' , la otra transaccion quedará esperando hasta que se desbloquee.
Abri dos psql y probalo.
BEGIN WORK;
SELECT * .... WHERE CODIGO=1 FOR UPDATE
en la otra terminal intenta modificar
UPDATE tabla SET CODIGO=9 WHERE CODIGO=1;
Esta ultima terminal quedará en espera y cuando en la primera
tires un END WORK; se desbloqueará.
--
Emanuel Calvo Franco
ArPUG [www.arpug.com.ar] / AOSUG Member
www.emanuelcalvofranco.com.ar
From | Date | Subject | |
---|---|---|---|
Next Message | Cesar Erices | 2009-06-18 21:45:42 | Cambiar Directorio Data |
Previous Message | uno dos | 2009-06-18 21:26:39 | duda con select for update |