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 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 -- TIP 3: Si encontraste la respuesta a tu problema, publ�cala, otros te lo agradecer�n
