2013-10-01 6 views
0

Je suis un débutant complet qui essaie d'apprendre PostgreSQL. J'essaie de me connecter à mon serveur postgres via un programme C en utilisant libpq.Impossible de se connecter au serveur PostgreSQL en utilisant libpq

Voici l'état du serveur:

home/planb/postgresql-9.2.4/Project status -o "-p 5555" 
pg_ctl: server is running (PID: 2338) 
/usr/local/pgsql/bin/postgres "-D" "/home/planb/postgresql-9.2.4/Project" "-p5555" 

Quand je compile, j'utilise:

gcc -I /usr/local/pgsql/include -L /usr/local/pgsql/lib test.c -lpq 

Quand je lance le programme avec ./a.out, il se lit comme suit:

Connection error 

Je crois que je n'utilise pas PQconnectdb correctement, mais cela pourrait être autre chose.

Voici mon fichier C: test.c

#include <stdio.h> 
#include <stdlib.h> 
#include <libpq-fe.h> 

int main(int argc, char* argv[]) 
{ 
//Start connection 
PGconn* connection = PQconnectdb("hostaddr=168.105.127.3 port=5555 dbname=Project username=postgres password=password"); 

if (PQstatus(connection) ==CONNECTION_BAD) 
    { 
    printf("Connection error\n"); 
    PQfinish(connection); 
    return -1; //Execution of the program will stop here 
    } 
    printf("Connection ok\n"); 
    //End connection 
    PQfinish(connection); 
    printf("Disconnected\n"); 
    return 0; 
} 

Toute entrée est très apprécié, merci!

Compris!

Je n'utilisais pas d'hostaddr valide. Je l'ai remplacé par:

host=localhost 

J'ai également supprimé dbname = Project. Quand je lance, je reçois:

Msg: Connection ok 
Disconnected 
+0

Pouvez-vous vous connectez en utilisant 'psql' avec ces paramètres? Que dit 'PQerrorMessage (connection)'? –

+0

Merci pour la réponse rapide! Je peux connecter aucun problème avec psql. Le message d'erreur se lit comme suit: ne pouvait pas traduire le nom d'hôte « tcp: //0.0.0.0/ » pour répondre: Nom ou service non connu – kensw

+0

Merci de me montrer PQerrorMessage, je suis en mesure de se connecter sans problème maintenant ! – kensw

Répondre

0

Voici la solution à mon problème:

Je n'utilisais pas un hostaddr valide. La façon correcte pour moi de me connecter à mon propre serveur local était avec:

host=localhost 

J'ai également supprimé dbname = Project. Je recevais un message disant que ce n'était pas une vraie base de données. Je suppose que je n'avais pas besoin d'appeler dbname dans PQconnectdb.

Maintenant, quand je le lance avec ces changements, je reçois:

Msg: Connection ok 
Disconnected 
+0

L'utilisation de PQerrorMessage dans une instruction printf m'a aidé à résoudre mon problème. – kensw

0

Essayez ceci

#include <libpq-fe.h> 
#include <stdio.h> 
#include <string> 
#include <iostream> 
void main(){ 
string m_strHost="127.0.0.1"; 
string m_strPort="5433"; 
string m_strUser="postgres"; 
string m_strPassword="postgres"; 
string m_strDataBase="postgres"; 

string strConnection="hostaddr="+m_strHost+" "+"port="+m_strPort+" "+"user="+m_strUser+" "+"password="+m_strPassword+" "+"dbname="+m_strDataBase; 
cout <<"\n ctrstring = "<<strConnection; 

char *pcon = const_cast<char*>(strConnection.c_str()); 
conn = PQconnectdb(pcon); 
cout <<"\n"; 
//conn = PQconnectdb("user=postgres password=postgres dbname=postgres hostaddr=127.0.0.1 port=5433"); 

// Check to see that the backend connection was successfully made 
if (PQstatus(conn) != CONNECTION_OK) 
{ 
    cout<<"Connection to database failed"; 
    PQfinish(conn); 
}else { cout<<"Connection to database - OK\n";} 
} 
Questions connexes