Re: detectar bloqueo de una fila

From: "Juan Carlos Del Rio" <juancarlos(dot)delrio(at)tecnosoft(dot)com(dot)co>
To: "Leonel Nunez" <postgres(at)enelserver(dot)com>
Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: detectar bloqueo de una fila
Date: 2004-08-18 19:24:17
Message-ID: 001a01c48558$f43ef740$8302000a@tecno.com.co
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El objetivo es bloquear el registro en una transaccion por un tiempo(sesion
A) . Mientras que otra (sesion B) si depronto desea actualizarla no pueda,
pero hago la prueba y la sesion B se queda "como pensado" en modo espera a
que suelte el registro.

Mas sin embargo lo que se desea es que la sesion B responda con un codigo o
nitifique que el registro esta ocupado, bloqueado, como se pregunta esto en
postgres?
----- Original Message -----
From: "Leonel Nunez" <postgres(at)enelserver(dot)com>
To: "Juan Carlos Del Rio" <juancarlos(dot)delrio(at)tecnosoft(dot)com(dot)co>
Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
Sent: Wednesday, August 18, 2004 12:11 PM
Subject: Re: [pgsql-es-ayuda] detectar bloqueo de una fila

> On Wed, 2004-08-18 at 10:50, Juan Carlos Del Rio wrote:
> > Hola Compañeros.
> >
> > Como puedo detectar un bloqueo en un registro.
> >
> > SESSION 1
> > #<base_de_datos>select id from tabla where id= id_registro for update;
> > #<base_de_datos>
> >
> > Como pueden ver aqui se bloquea el registro y el shell me prepara para
> > la siguiente instruccion con #<base_de_datos>
> >
> > Seguidamente un usuario en otra sesion trata de bloquear ese registro
> >
> > SESION 2
> >
> > #<base_de_datos>update tabla set campo='xxx' where id= id_registro;
> >
> > En esta sesion queda bloqueada la peticion, pero no me arroja ningun
> > resultado...
> >
> > NOTA: Necesito un mensage de respuesta para poder tomar una decision
> > en el entorno WEB.
> >
> >
> > O mejor aun.... ¿ Como puedo detectar un bloqueo en un registro antes
> > de hacer un update ?
>
> El problema aqui es que cuando haces el select for update NO esta
> dentro de una transaccion
> por consecuencia haces el select for update se bloquea y desbloquea
> cuando termina
>
> necesitarias un
>
> begin;
> select id from tabla where id= id_registro for update;
> end;
>
>
> la otra sesion se va a bloquear mientras termina la transaccion en la
> sesion 1
>
>
> en cuando al desarrollo de aplicaciones para el www
> DEBES asegurar que los bloqueos y actualizaciones sean "transparentes"
> para los otros procesos. Me refiero a que NO duren "mucho" ya que una
> transaccion bloqueando un registro puede detener TODOS los otros
> procesos.
>
>
> De hecho como quieres actualizar 2 veces la misma tabla es NECESARIO el
> bloqueo
>
>
> date una paseada por :
>
> http://www.postgresql.org/docs/7.4/static/mvcc.html
>
>
> Seguimos ....
>
> --
> ,''`. Leonel Nunez
> : :' : http://enelserver.com
> `. `' DEBIAN GNU/LINUX
> `- A REAL FREE OS
>
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Josué Maldonado 2004-08-18 19:32:06 Re: detectar bloqueo de una fila
Previous Message Patricio Muñoz 2004-08-18 19:17:14 Re: INSTALAR POSTGRESQL 7.4