У меня есть приложение, использующее libpq для подключения к postgresql серверу и использующее pgbouncer в качестве пула соединений
if (pconn == nullptr) {
pconn = PQconnectdb(chrConnectStr);
}
if (PQstatus(pconn) == CONNECTION_BAD) {
//If it fails, try to connect once
pconn = PQconnectdb(chrConnectStr);
//Make an error if it still fails
if (PQstatus(pconn) == CONNECTION_BAD) {
//Error sometimes occurred here when test with concurrent connection
return S_FALSE;
}
}
.......
//When connection OK, doing SQL execution
//Close connection after finish
PQFinish(pconn);
Все хорошо, когда я запускаю один экземпляр приложения. Но когда я тестирую с несколькими экземплярами одновременно (около 5 экземпляров), иногда я получаю CONNECTION_BAD
status
В то время я проверял PQerrorMessage(conn)
и вижу сообщение об ошибке:
could not connect to server: Address already in use (0x00002740/10048)
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 6543?
Вот конфигурация pgbouncer
[databases]
food = host=127.0.0.1 dbname=MyDB auth_user=MyUser
[pgbouncer]
listen_port = 6543
listen_addr = *
auth_type = md5
auth_file = D:\PostgreSQL\pgbouncer\users.txt
admin_users = MyUser
syslog = 1
default_pool_size = 100
server_reset_query = DEALLOCATE ALL
Также в настройках postgres.conf
I: max_connections = 500