Para dar un poco más de información es preciso aclarar la situación real en que 
debo usar el pgbouncer. El asunto es que junto a otro compañero estoy 
desarrollando un redirector para squid en C++, hay una BD, y dicho redirector 
debe conectarse a ella para consultar determinada información y en dependencia 
permitir o denegar el acceso a la solicitud del usuario. Si en algún momento se 
cayera la conexión pasaría lo que he descrito anteriormente, y el usuario no 
podría navegar.

A continuación un ejemplo de programa y, adjunto, el fichero de configuración:

#include <iostream>
#include <pqxx/pqxx>
#include <vector>       

int main() {
        std::vector<pqxx::connection*> connections;
        
        for (unsigned int i = 0; i < 100; ++i) {        
                try {                   
                        connections.push_back(new 
pqxx::connection("host=localhost dbname=fcweb port=6432 user=postgres 
password=postgres"));    
                        
                        pqxx::work t(*connections[i], "DemoTransaction");       
        
                        
                        t.commit();                     
                        connections[i]->disconnect();
                        delete connections[i];
                }
                catch(std::exception &e) {
                        std::cout << e.what() << std::endl;                     
                }
        }               
        return 0;
}


Para probar que pasaría si se cae la conexión lo que hacemos es parar el gestor 
de base de datos. Cuando ello sucede no ejecuta nada más luego de la línea:

connections.push_back(new pqxx::connection("host=localhost dbname=fcweb 
port=6432 user=postgres password=postgres"));    

sino que se queda en un ciclo infinito en ella, pero nunca el programa recibe 
noticias de cual es el problema.


Se que no debemos conectarnos directamente con el usuario postgres. Cuando el 
servidor está corriendo funciona bien.
                        
Saludos, José R.


----- Original Message -----
From: Alejandro D. Burne <[email protected]>
To: Jose Ramon Hermosilla Moreno <[email protected]>
Cc: [email protected]
Sent: Tue, 30 Jun 2009 13:24:45 -0400 (CDT)
Subject: Re: [pgsql-es-ayuda] pgbouncer y conexiones rotas

El 30 de junio de 2009 13:41, Jose Ramon Hermosilla
Moreno<[email protected]> escribió:
> Gracias por la respuesta, he seguido el consejo pero el problema continúa 
> (client_idle_timeout = 1). Muestro un fragmento del log para que se vea el 
> asunto con más claridad:
>
> 2009-06-30 12:33:05.809 3717 LOG S-0x93b3018: fcweb/[email protected]:5432 
> new connection to server
> 2009-06-30 12:33:05.810 3717 LOG S-0x93b3018: fcweb/[email protected]:5432 
> closing because: connect failed (age=0)
> 2009-06-30 12:33:06.818 3717 LOG S-0x93b3018: fcweb/[email protected]:5432 
> new connection to server
> 2009-06-30 12:33:06.819 3717 LOG S-0x93b3018: fcweb/[email protected]:5432 
> closing because: connect failed (age=0)
> 2009-06-30 12:33:07.825 3717 LOG S-0x93b3018: fcweb/[email protected]:5432 
> new connection to server
> 2009-06-30 12:33:07.826 3717 LOG S-0x93b3018: fcweb/[email protected]:5432 
> closing because: connect failed (age=0)
>
> pgbouncer reintenta conectarse continuamente y no veo la forma de evitarlo.
> ¿Cómo evitar este comportamiento o detectar que no hay conexión?
>
> Saludos, José R.

Me parece que el problema aquí no es la nueva conexión, simplemente
que no se puede conectar "closing because: connect failed"
Me llama la atención tambien que utilices el usuario postgres, has
creado el archivo pgbounceruserlist.txt, y parametrizado correctamente
pgbouncer.ini?

Mira un log funcionando:

2009-06-30 14:09:09.789 14648 LOG C-0x156e5df0:
AMR/[email protected]:42890 login successful: db=AMR user=auth
2009-06-30 14:09:17.236 14648 LOG C-0x156e42a0:
AMR/[email protected]:42891 login successful: db=AMR user=auth
2009-06-30 14:09:18.192 14648 LOG C-0x156e8070:
AMR/[email protected]:54576 closing because: client close request
(age=323)
2009-06-30 14:09:25.223 14648 LOG C-0x156e8070:
AMR/[email protected]:49701 login successful: db=AMR user=amrweb
2009-06-30 14:09:26.551 14648 LOG C-0x156e8070:
AMR/[email protected]:49701 closing because: client close request
(age=1)
2009-06-30 14:09:30.860 14648 LOG C-0x156e5df0:
AMR/[email protected]:42890 closing because: client close request
(age=21)
2009-06-30 14:09:31.369 14648 LOG C-0x156e5df0:
AMR/[email protected]:49706 login successful: db=AMR user=amrweb
2009-06-30 14:09:31.372 14648 LOG C-0x156e5df0:
AMR/[email protected]:49706 closing because: client close request
(age=0)
2009-06-30 14:09:33.690 14648 LOG C-0x156e5df0:
AMR/[email protected]:42892 login successful: db=AMR user=auth
2009-06-30 14:09:34.552 14648 LOG C-0x156e8070:
AMR/[email protected]:42893 login successful: db=AMR user=auth
2009-06-30 14:09:38.401 14648 LOG C-0x156e5c80:
AMR/[email protected]:54583 closing because: client close request
(age=288)
2009-06-30 14:09:42.149 14648 LOG C-0x156bd0a0:
AMR/[email protected]:51630 closing because: client close request
(age=708)

"postgres" "postgres"

Attachment: pgbouncer.ini
Description: Binary data

--
TIP 10: no uses HTML en tu pregunta, seguro que quien responda no podrá leerlo

Responder a