PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

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

#1 13/02/2012 21:48:42

kadbra78
Membre

ERROR: operator does not exist: character varying = integer

Lorsque j'exécute cette line sur mon serveur de base de données originale version 8.1
Je n'ai aucun message d'erreurs

Fmt(command,"%s<%s%s","SELECT typecertificat FROM mac WHERE infodht_no_serie=",no_serie);

Par contre lorsque cette commande est exécuter sur mon nouveau serveur version 9.0 sur lequel j'ai restauré ma base de données original
J’ai eu ce message d'erreur

ERROR:  operator does not exist: character varying = integer
LINE 1: ...ECT typecertificat FROM mac WHERE infodht_no_serie =55137954
                                                              ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
********** Error **********
ERROR: operator does not exist: character varying = integer
SQL state: 42883
Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Character: 55

Y a t-il un moyen de régler ce problème sans que je modifie ma requête ?

Hors ligne

#2 13/02/2012 21:54:27

rjuju
Administrateur

Re : ERROR: operator does not exist: character varying = integer

Il y a moyen, en modifiant les tables sytème, de remettre le cast automatique, mais cela peut apporter plus de problèmes qu'en résoudre.
Vous pouvez regarder ce thread http://forums.postgresql.fr/viewtopic.php?id=1804 pour plus de détail

Hors ligne

#3 13/02/2012 22:24:44

gleu
Administrateur

Re : ERROR: operator does not exist: character varying = integer

Ce que veut dire rjuju, c'est que la version 8.3 et les versions ultérieures sont beaucoup plus restrictives au niveau des conversions implicites. Pour que votre requête fonctionne, elle doit utiliser une conversion explicite. Donc soit

SELECT typecertificat FROM mac WHERE infodht_no_serie::integer=5513795

soit

SELECT typecertificat FROM mac WHERE infodht_no_serie ='5513795'

Hors ligne

#4 13/02/2012 23:05:10

kadbra78
Membre

Re : ERROR: operator does not exist: character varying = integer

voulez vous m'informer SVP s'il y a un moyen de modifier cette command de sorte que soit accepter par tout mes serveur le 8.1 et 9.0
int PSQL_GetCertificat(char no_serie[], char *typecert)
{
    int status;
    char command[400];
    PGresult *result; 
    int nbTuples;
   
    Fmt(command,"%s<%s%s","SELECT typecertificat FROM mac WHERE infodht_no_serie=",no_serie);
    result = PQexec(db, command);
    status = VerifyCmdWithData(result);

Hors ligne

#5 13/02/2012 23:13:21

gleu
Administrateur

Re : ERROR: operator does not exist: character varying = integer

C'est ma réponse ci-dessus. La requête avec la conversion explicite fonctionne sur toutes les versions.

Hors ligne

#6 14/02/2012 09:43:44

Marc Cousin
Membre

Re : ERROR: operator does not exist: character varying = integer

Il vaut mieux toutefois utiliser la version infodht_no_serie ='5513795' : dans le cas inverse, on applique une fonction sur infodht_no_serie, qui empêchera d'utiliser l'index sur la colonne s'il y en a un.

Hors ligne

Pied de page des forums