[Pgsql-ayuda] desbloqueo de registros

Alvaro Herrera Munoz alvherre@dcc.uchile.cl
Fri, 30 May 2003 10:26:30 -0400


On Fri, May 30, 2003 at 11:30:36AM +0200, jose antonio leo wrote:
> La verdad es que es una aplicaci?n un poco un poco mal "parida", desde un
> inicio, pero es una herencia...
> Resulta que hay pantallas en la aplicaci?n que cuando entran en modificaci?n
> de un registro, lo bloquean. "Select for update" y despues de la
> moodificaci?n lo desbloquea.
> Pero es posible que el usuario cierre mal la aplicai?n en la pantalla de
> modificaci?n o pierda la conexion, o se ponga a navegar. Eso deja el bloqueo
> del registro hasta que se acuerde de su trabajo.

Cuando la conexion se cierra, las transacciones en curso son abortadas,
y los locks que tienen son liberados.  Si alguien cierra la aplicacion
"a la mala", el sistema operativo deberia cerrar la conexion TCP con el
servidor.

Ahora, si el pajaron de turno deja la aplicacion abierta y se pone a
navegar, lo que necesitas es aplicar LART convenientemente (Luser
Attitude Readjustment Tool).


He leido varias discusiones en pgsql-general sobre como hacer
apropiadamente los bloqueos de datos para este tipo de operaciones.  En
general la conclusion ha sido que el mecanismo _no pasa_ por usar SELECT
FOR UPDATE, por la misma razon que planteas.  SELECT FOR UPDATE tiene un
lugar bien ganado, pero _no_ es el manejo de datos que vienen de una
aplicacion interactiva.

-- 
Alvaro Herrera (<alvherre[@]dcc.uchile.cl>)
"La naturaleza, tan fragil, tan expuesta a la muerte... y tan viva"