Vous n'êtes pas identifié(e).

#1 27/06/2011 12:11:58

mika86
Membre

PQconnectdb et PQconnectdbParams retournent CONNECTION_BAD

Bonjour,
Le principale est dans le titre, je n'arrive pas à me connecter avec un programme en c alors qu'avec psql, il n'y a aucun problème.
en c :

static PGconn* me;

bool DBInit(void)
{
   const char *keywords[3] = {"dbname", "user", NULL};
   const char* values[3] = {"probe", "mika", NULL};
   me = PQconnectdbParams(keywords, values, 0);
   if (PQstatus(me) != CONNECTION_OK)
   {
	printf("failed to connect to database with %s = %s and %s = %s\n", keywords[0], values[0], keywords[1], values[1]);
	exit(EXIT_FAILURE);
   }
...
}

me retourne :

failed to connect to database with dbname = probe and user = mika

alors que

psql -d probe -U mika

me retourne :


psql (9.0.4)
Saisissez « help » pour l'aide.
probe=#

À noter que je viens de réinstaller mon système récemment et que sous postgres 8.4, cela fonctionnait très bien (avec PQconnectdb).
J'ai essayé plusieurs combinaisons, sans succès. Google n'est pas très bavard non plus.
configuration : postgresql 9.0.4, debian sid, cheveux foncés.
Une idée ?
merci d'avance

Hors ligne

#2 27/06/2011 14:09:41

gleu
Administrateur

Re : PQconnectdb et PQconnectdbParams retournent CONNECTION_BAD

Quel message d'erreur est donné par PostgreSQL ?


Guillaume.

Hors ligne

#3 27/06/2011 14:12:52

gleu
Administrateur

Re : PQconnectdb et PQconnectdbParams retournent CONNECTION_BAD

Et autre question, avez-vous des variables d'environnement positionnées qui seraient prises en compte par psql et pas par votre programme ?


Guillaume.

Hors ligne

#4 27/06/2011 14:23:57

mika86
Membre

Re : PQconnectdb et PQconnectdbParams retournent CONNECTION_BAD

bojour,

Ils ne sont pas affichés. Y a t'il une façon de les afficher ?
J'ai essayé de récuperer les messages avec :

PQsetNoticeProcessor(me,
                        PrintDbError,
                        NULL);

juste apres la connection et la fonction PrintDbError :

static void PrintDbError(void * UNUSED(arg), const char * message)
{
    printf("DB : %s", message);
}

rien ne s'affiche, appeler PQsetNoticeProcessor avant la connection ne change rien non plus.
merci.

EDIT :
Je n'ai rien positionné de spécial, j'ai voulu créer le langage plpgsql mais il existe déjà.
Dans mon programme, je fais

setlocale(LC_ALL, "C");

Mais avec ou sans, il n'y a aucune différence.

Dernière modification par mika86 (27/06/2011 14:29:27)

Hors ligne

#5 27/06/2011 14:31:52

gleu
Administrateur

Re : PQconnectdb et PQconnectdbParams retournent CONNECTION_BAD

Ils ne sont pas affichés. Y a t'il une façon de les afficher ?

Non, il faut regarder sur le serveur. C'est le plus simple à faire.


Guillaume.

Hors ligne

#6 27/06/2011 14:35:29

gleu
Administrateur

Re : PQconnectdb et PQconnectdbParams retournent CONNECTION_BAD

Un truc auquel je viens de penser. La connexion nécessite peut-être un mot de passe. Utiliser PQconnectionNeedsPassword pour le savoir (http://docs.postgresql.fr/9.0/libpq-status.html).


Guillaume.

Hors ligne

#7 27/06/2011 15:01:19

mika86
Membre

Re : PQconnectdb et PQconnectdbParams retournent CONNECTION_BAD

eh bien merci pour la vitesse de réponse.

Le mot de passe ne semble pas poser de problème, :
PQconnectionNeedsPassword() renvoie 0.

Comment puis-je regarder les messages sur le serveur ?

Je remarque aussi que dans /etc/postgresql, j'ai 2 dossiers : 8.4 et 9.0. Peut-il y avoir un conflit ? Surtout que postgresql-client 8.4 n'est plus installé.

EDIT : je ne pense pas qu'il s'agisse d'un conflit
pg_config.libpq-dev et pg_config ne me retournent que des chemins vers 9.0. par exemple :

SHAREDIR = /usr/share/postgresql/9.0

Dernière modification par mika86 (27/06/2011 15:24:26)

Hors ligne

#8 27/06/2011 15:51:34

gleu
Administrateur

Re : PQconnectdb et PQconnectdbParams retournent CONNECTION_BAD

Vous avez l'air d'être sous Debian. Il y a de fortes chances que les journaux soient dans /var/log/postgresql.


Guillaume.

Hors ligne

#9 27/06/2011 16:08:55

mika86
Membre

Re : PQconnectdb et PQconnectdbParams retournent CONNECTION_BAD

Oui, je suis sous debian.
Le fichier log est bien là.
Je l'ai affiché avec sudo cat /var/log/postgresql/postgresql-9.0-main.log

Si je me connecte avec psql sur une base qui n'existe pas, iil me refuse la connexion et il se remplit :
"la base de donn?es << toto >> n'existe pas"

Si je lance mon programme, il refuse aussi mais il ne se remplit pas.

En tout cas merci, il y a plein de fichiers log ici, je n'ai jamais regardé dans le répértoire /var/log, ca a l'air pratique.

Hors ligne

#10 27/06/2011 16:24:02

gleu
Administrateur

Re : PQconnectdb et PQconnectdbParams retournent CONNECTION_BAD

Dans ce cas, le programme essaie de se connecter ailleurs que sur le serveur pour lequel vous regardez les traces. Fouillez dans les logs, il doit y en avoir un qui correspond au votre.


Guillaume.

Hors ligne

#11 27/06/2011 17:08:57

mika86
Membre

Re : PQconnectdb et PQconnectdbParams retournent CONNECTION_BAD

J'ai deux fichiers dans /var/log/postgresql
-L'un pour la version 8.4 qui n'a pas d'entrée posterieure au 18/06
-L'autre pour la version 9.0 (celui qui ne se remplit pas)
Y en a-t-il d'autres qui soient pertinents ?
Ou bien, y a-t-il une fonction pour demarrer postgresql 9 pour les programmes c ? (/etc/init.d/postgresql start a été fait)
/etc/postgresql/9.0/main/start.conf contient des commentaires et "auto".

Hors ligne

#12 27/06/2011 17:15:21

gleu
Administrateur

Re : PQconnectdb et PQconnectdbParams retournent CONNECTION_BAD

Comme vous avez deux serveurs, le mieux est de préciser le numéro du port pour la connexion dans votre programme C.


Guillaume.

Hors ligne

#13 27/06/2011 17:35:21

mika86
Membre

Re : PQconnectdb et PQconnectdbParams retournent CONNECTION_BAD

Résolu !

Merci beaucoup, c'était donc celà. Pour info, l''autre serveur (8.4) n'existe plus, il a été supprimé au passage de squeezy à sid.
J'ai mis le port 5433, celui par défaut et cela fonctionne.
Maintenat j'attaque les soucis du passge de la version 2 à 3 de gtk...

Hors ligne

#14 27/06/2011 17:46:08

gleu
Administrateur

Re : PQconnectdb et PQconnectdbParams retournent CONNECTION_BAD

Bon courage smile


Guillaume.

Hors ligne

Pied de page des forums