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])