Arturo escribió: > Mi problema esta en que tengo un cuadro de ingreso de datos, en el cual se > ingresan datos y se guardan resultados de operaciones > el cuadro es del tipo modal (con botones ok cancel) entonces al mostrarse el > dialogo yo inicio la transacción y al presionar ok realizo un commit, y con > el cancel un rollback. > El problema va por el lado de que algunos usuarios podrían dejar abierta esa > ventana de ingresos de datos de manera prolongada (de hecho es una mala > costumbre que tienen con el sistema actual que manejan, el cual vamos a > remplazar) > > Entonces yo quiero saber cuanto tiempo debe estar abierta una transacción, y > que problemas podría acarrearme que una transacción este abierta mucho > tiempo.
No hay límites absolutos, pero dejar una transacción abierta durante una cantidad arbitraria de tiempo te traerá problemas debido a que VACUUM no va a ser capaz de limpiar adecuadamente las tablas. Yo diría que tu enfrentamiento al problema no es ideal. Te aconsejaría que no abrieras la transacción al abrirse el diálogo, sino sólo al momento de presionar OK. Los cambios que haga el usuario en el diálogo deberías mantenerlos en memoria local de la aplicación, y mandarlos todos juntos una vez se presione OK. (Una posible alternativa sería abrir la transacción al abrir el diálogo, y tener un reloj en éste que le muestre al usuario "cuanto tiempo queda para el timeout" ... si se acaba el tiempo, se cancela la transacción. Obviamente tendría que haber otro botón para que el usuario le dijera a la aplicación "dame más tiempo", etc. No sé si esto sea realmente usable; me imagino que los usuarios te odiarán si implementas una idea como esta. Por supuesto, abortar el diálogo sin haber dado ningún aviso anterior al usuario es una forma particular de esta idea, mucho peor). -- Alvaro Herrera http://planet.postgresql.org/ "El sudor es la mejor cura para un pensamiento enfermo" (Bardia) -- TIP 1: para suscribirte y desuscribirte, visita http://archives.postgresql.org/pgsql-es-ayuda
