Re: duda con select for update

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

In response to

Browse pgsql-es-ayuda by date

  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