2011/11/9 Jaime Casanova <[email protected]>: > 2011/11/9 ruben avila galindo <[email protected]>: >> idle in transaction >> > > IDLE significa que esta esperando algo (en este caso a que le digas que > hacer). > IN TRANSACTION significa que abriste una transacción que nunca cerraste. > > y no, postgres no debe cerrar las conexiones automaticamente y mucho > menos una que tenga una transaccion abierta. El programador abrio la > conexion y la transaccion y es la responsabilidad del programador > cerrar ambas >
Hola Jaime, antes que nada un saludo, tengo algunas dudas relacionadas con este tema (debido a que tengo un escenario de idle transaction) las dudas son las siguientes: 1.- Entiendo que cuando se utiliza una función de plpgsql hay un begin y commit implícitos, es posible que una transacción se quede en "idle in transaction" si se esta ejecutando un reindex o vacuum full en la tabla que tiene un foreign key y que hace referencia a la tabla donde la función plpgsql esta haciendo un update o un insert ? es decir, yo quiero hacer unsert o update en la tabla A, pero la tabla A tiene un foreign key hacia la tabla B y en la tabla B hay un proceso reindex o vacuum full. 2.- En el mail que has enviado anteriormente mencionas que postgresql no cierra automaticamente las conexiones, la pregunta es, esto no suceda bajo ninguna circunstancia ? ni siquiera cuando postgresql no detecta tráfico en una conexión/sesión por un tiempo determinado? esta pregunta la hago porque actualmente estoy revisando un problema en una aplicación que han desarrollado en donde trabajo, (no poseo el código fuente) el comportamiento es el siguiente: La aplicación abre una conexión hacia postgresql cuando arranca (es un daemon) y por lo visto la mantiene abierta por un tiempo indeterminado debido a que realiza updates contantes (existen horas en las que debe tener muy poca actividad) en algunas ocaciones los logs de dicha aplicación marcan un error -400: -400 (ECPG_PGSQL) con la siguiente descripción: sqlerrm:'no connection to the server después del error inicial la aplicación sigue marcando el mismo error una y otra vez cuando intenta hacer un insert a travez de una fucion plpgsql, (entiendo que el problema es la aplicación puesto que nunca cierra la conexión hacia la base de datos y aun habiendo detectado este problema no la cierra en intenta reconectar hacia la db) el problema es que los desarrolladores argumentan que este es un error de postgresql no de su aplicación y debo demostrar lo contrario. La version de postgresql que se esta utilizando es 8.3 PD: La aplicación realiza un vacuum full cada x tiempo aproximadamente cada 15 inserts o 1 hora, entiendo que esto tampoco es correcto y el vauum debería ser mediante auto-vacuum, estoy en proceso de convencer a los des arrolladores de este tema, y creo que tal vez pueda estar relacionado con los estados "idle in transaction" Cualquier comentario lo agradezco mucho. Gracias. - Enviado a la lista de correo pgsql-es-ayuda ([email protected]) Para cambiar tu suscripción: http://www.postgresql.org/mailpref/pgsql-es-ayuda
