Re: Bloqueo en registro-tabla

From: Jaime Casanova <jcasanov(at)systemguards(dot)com(dot)ec>
To: suso <jlcubas(at)terra(dot)es>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Bloqueo en registro-tabla
Date: 2009-06-12 20:43:09
Message-ID: 3073cc9b0906121343h38edfd7dtb69619c19014ec1d@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

2009/6/12 suso <jlcubas(at)terra(dot)es>:
>
> Hay alguna manera de poner un temporizador o algo parecido para lo
> siguiente:
> Bloqueo(para que solo pueda leer otro cliente) desde mi aplicación un
> registro, mediante un valor en un campo, cierro la conexión, trabajo
> desconectado con ese registro, cuando termino, lo abro otra vez, hago los
> cambios, y desbloqueo ese registro,

puedes usar advisory locks
(http://www.postgresql.org/docs/8.3/static/explicit-locking.html#ADVISORY-LOCKS),
ojo que nunca he usado eso y no me parece logica toda la complicacion
que quieres hacer

aunque parece que se desbloquea una vez que cierras la sesion

> todo
> para notener la conexion abierta y así disminuir el tráfico de red,

ah? trafico de red solo habra cuando estes pasando informacion entre
el cliente y el servidor, si abres la conexion y no haces ninguna
consulta al servidor luego de eso no tiene por que haber mayor trafico
de red.

ademas no es muy buena idea estar abriendo y cerrando conexiones
porque eso tiene un costo en tiempo en postgres, de hecho lo ideal es
que tengas un pool de conexiones y que dejes que el se encargue de los
detalles

> supongamos que en esos segundos/minutos, se va la luz, o se le bloquea al
> cliente el pc, etc., como puedo hacer que desde el servidor, en caso de esos
> temas, y pasado "x" minutos, se desbloquee ese registro -tabla, pero
> solamente de ese cliente y ese registro-tabla.
> Eso debería dispararse para cada cliente y por cada registro que modificase
> ese cliente, y pararlo o pararse cuando cambia de valor ese campo, o sea,
> despues de un update.

es decir que quieres encontrar la solucion a un problema que no tienes
aun pero que quieres implementar?

creeme la solucion es peor que la enfermedad en este caso... conozco
un ERP que tenia algo como lo que describes (bloqueo de aplicacion se
llamaba, por si eso te da una idea de donde esta la solucion)...
pasa la mayor parte del tiempo eliminando bloqueos que se habian
quedado de otros dias, o por que se colgaba la maquina, etc, etc...

los bloqueos en las tablas no deberian demorar demasiado asi (de hecho
tu incluso dices solo unos segundos) asi que estas complicando
exageradamente las cosas para no obtener ningun beneficio perceptible

> Me imagino que con un trigger y algun tipo de funcion, pero por mas que miro
> en la ayuda, no encuentro nada referente a eso.

y que pasa si se te cuelga la maquina? y no pudiste desbloquear? y
creeme la idea del temporizador no te va a servir de nada porque no
puedes realmente determinar de antemano cuanto va a demorar un
proceso... que pasa si el usuario esta ingresando los datos (claro la
maquina se desconecto y dejo bloqueado) luego de media hora (ya el
temporizador desbloqueo y alguien mas empezo a modificar) graba los
cambios y modifica otro cambio que alguien mas hizo... te imaginas el
desastre que se va a causar?

--
Atentamente,
Jaime Casanova
Soporte y capacitación de PostgreSQL
Asesoría y desarrollo de sistemas
Guayaquil - Ecuador
Cel. +59387171157

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Lennin Caro 2009-06-12 20:52:25 Re: INFORMACION
Previous Message jorge alvarez 2009-06-12 20:29:22 INFORMACION