Hola,
me contesto a mi mismo. He estado investigando y resulta que el conector 
Python-postgres psycopg2 tiene problemas con aplicaciones multihilo. La 
solución es actualizar a una versión más moderna (yo tenía la 2.0.8 y he 
descargado la 2.0.10).

Lo que pasa es que en el fichero de instalación de psycopg2 2.0.10 pone que 
esta versión, aunque funcionará con multihilo, tendrá fugas de memoria a no ser 
que se compile libpq5 con la opción --with-thread-safety. He estado buscando en 
google los fuentes de libpq5, ya que para Ubuntu vienen sólo los binarios, pero 
no los encuentro. ¿Alguien sabe dónde los puedo encontrar?

Un saludo,
Jorge



-----Mensaje original-----
De: Jorge Romeo 
Enviado el: jueves, 03 de septiembre de 2009 16:47
Para: Jorge Romeo
Asunto: RE: [pgsql-es-ayuda] Fallo de segmentación

Sólo quería añadir que me acaba de volver a salir... Esta vez en español!!!

16:40:11-> Fallo la consulta: WARNING: no hay una transacción en curE =3->error 
de sintaxis en o cerca de <<WARNING>>
WARNING: no hay una transacción en curE =3

Espero me puedan ayudar...
Saludos,
Jorge Romeo 

-----Mensaje original-----
De: Jorge Romeo 
Enviado el: jueves, 03 de septiembre de 2009 16:38
Para: postgres ayuda sql español
Asunto: [pgsql-es-ayuda] Fallo de segmentación

Hola expertos,
 
a ver si logro explicarme bien porque estoy metido en un lío bastante molesto...
 
Estoy trabajando en una aplicación de recogida de datos de proceso trabajando 
con Python y con postgres 8.3 como base, usando para conectarme psycopg2.
 
El programa está terminado y funciona bien, pero de vez en cuando aborta, dando 
como única explicación "Fallo de Segmentación". Esto es extremadamente raro en 
Python, ya que es un lenguaje interpretado...
 
Bien, el caso es que por casualidad, he pillado una excepción en mi módulo de 
base de datos, que hace sospechar que postgres podría estar implicado. El 
mensaje de error es el siguiente:
 
15:55:41-> Fallo la consulta: WARNING: there is no transaction inCANTE=2->error 
de sintaxis en o cerca de <WARNING>

que viene del fragmento en Python:
 
       except Exception as msg:
            if not "TRAMAS_RECIENTES" in query :
                sys.stderr.write(time.asctime()[11:19] + "-> Fallo la consulta: 
" \
                                 + query + "->" + str(msg) )
                self.reconexion()
            return []

Lo que ha pasado aquí es que la query que he pasado a la función se ha 
machacado con la "fusión" de un mensaje de advertencia de postgres (WARNING: 
there is no transaction in) y una consulta antigua (query = "DELETE FROM 
ORDENES WHERE ID_REPLICANTE=2"), que sólo hago al arranque del programa para 
limpiar órdenes residuales.
 
No quiero preguntar por qué Python aborta, sino simplemente si alguien sabe 
cuando postgres lanza ese mensaje de advertencia para tener alguna pista de por 
qué puede estar pasándome esto.
 
También me gustaría saber si alguien tiene experiencia con psycopg2 y le ha 
pasado algo así, y si hay alternativas para conectar desde Python, ya que no me 
fío mucho del psycopg2 despues de ver esto.
 
 
 
Gracias de antemano
Jorge Romeo

--
TIP 1: para suscribirte y desuscribirte, visita 
http://archives.postgresql.org/pgsql-es-ayuda


--
TIP 2: puedes desuscribirte de todas las listas simultáneamente
    (envía "unregister TuDirecciónDeCorreo" a [email protected])

Responder a