Hola Jaime
2009/6/12 suso <[email protected]>:
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
Quizás me esté complicando la vida
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
en mi caso, pueden ser como 20 usuarios, pero en principio sólo 1 a las
mismas tablas(pero cualquiera sabe), como como 30 tablas, no todas
abiertas a la vez, y deberían estar bloqueadas como 90' aprox., pero
todas de esas 30, pero si la mayoría, si no puedo hacer lo del timer, no
sé si eso será mucha carga para postgres, ya que según me comentas, no
lo es para la red.
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?
Si, así es
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
hay tablas que sólo serían unos segundos( 1' coom mucho), pero otars que
pueden estar abiertas como 90', revision del pacientes
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?
entonces, que me aconsejas?
Gracias
Un slaudo
Suso
--
TIP 4: No hagas 'kill -9' a postmaster