Vous n'êtes pas identifié(e).
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
Quel message d'erreur est donné par PostgreSQL ?
Guillaume.
Hors ligne
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
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
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
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
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
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
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
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
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
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
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
Bon courage
Guillaume.
Hors ligne