IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 PostgreSQL Discussion :

Conversion implicite possible


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 103
    Par défaut Conversion implicite possible
    Bonjour à tous.

    Je vous explique la situation : suite à un upgrade de la version de PostgreSQL de la 8.2 à la 8.3, après restauration de mes BDD qui s'est bien déroulée, l'application web qui en dépend ne fonctionne plus. En fait il s'agit d'un problème dû à une requête du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select exd.id,exd.node,
        exd.valid,(select codes.libelle from codes where codes.sous_cat='ACTI_RECH' and codes.code=exd.activite) as activite_lib,exd.activite,exd.nomempl
    from exd where exd.node ILIKE '011A85P'
    qui fait une comparaison d'égalité entre un champ de type character varying et un autre de type integer. D'où l'erreur:
    ERREUR: l'opérateur n'existe pas : integer = character varying
    Mon souci: c'est que cette requête se trouve dans une .ddl que je ne peux modifier, et la BDD ne doit subir aucun changement sur son dictionnaire de données (pas de alter column pour changer le type). L'application n'est pas de moi et je dois la reprendre pour des mises à jours. Ce qui me surprend c'est que cette requête ne posait aucun problème jusqu'à maintenant...

    Alors je me demande comment Postgresql gérait cette conversion auparavant? faut-il activer quelque chose pour les conversion implicites, c'est la seule piste que j'ai, mais j'ai besoin d'avis d'experts.

    Merci d'avance pour vos réponses.

    Bonne journée.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Et bien vous êtes dans une impasse car les règles de transtypage étant plus ou moins libre, chaque SGBDR peut transtyper comme bon lui semble en l'absence de cohérence dans la requête et même changer le comportement d'une version à l'autre !

    Seule solution : revenir à la version précédente.

    Entre nous je fustigerait l'imbécile qui a écrit une requête aussi stupide (il suffirait d'ajouter un CAST pour que tout aile bien), comme celui qui a modélisé la base de données (les types doivent être cohérent pour les jointures) pour avoir sciemment ignoré ce qu'est un modèle de données !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    faut-il activer quelque chose pour les conversion implicites
    Il est possible de les créer soi-même avec CREATE CAST
    Il existe un script qui recrée un partie des conversions implicites (voire toutes?) qui ont disparu en 8.3.

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 103
    Par défaut
    Je vous remercie pour vos réponses.

    L'envie ne m'en manque pas, j'ignorais complétement, par principe d'ailleurs, qu'on pouvait tester une égalité sur deux arguments de types différents.
    Je fais systématiquement mes cast personnellement, et là je viens de perdre une semaine pour cette bêtise...

    Toutefois, merci pour le script estoFilo, il m'évite une réinstalle complète de la BDD.

    Hors sujet: autre surprise: le champ incriminé de type text dans la Base de données, est lié en interface avec des champs de saisie qui n'autorisent que la saisie numérique ... Je le remercie pour la modélisation des données et du traitement, parce que bien sûr l'interface est un contrôle personnalisé répertorié dans une .dll!!
    Estimation du temps de redéveloppement pour une demande d'évolution: ... juste pour une conversion où une requête SQL aurait suffit, on se retrouve à faire de la maintenance sur la BDD, faire les conversions et refaire l'application, sans savoir qu'est-ce qui va être impacté au final.

    Le pire c'est que je commence à avoir l'habitude de récupérer les plans comme ça, je ne fais plus que de la maintenance à force...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. conversion implicite etrange
    Par maxmarie dans le forum VB.NET
    Réponses: 4
    Dernier message: 22/06/2007, 10h48
  2. Réponses: 10
    Dernier message: 27/05/2007, 17h50
  3. [9i]Conversion implicite ?
    Par lunab54 dans le forum SQL
    Réponses: 7
    Dernier message: 19/04/2007, 14h49
  4. [C#] Conversion implicite de type object vers int
    Par alexking2005 dans le forum C#
    Réponses: 5
    Dernier message: 02/01/2007, 10h02
  5. [jdbc][oracle] conversion implicite erronée
    Par Jack Huser dans le forum JDBC
    Réponses: 2
    Dernier message: 30/06/2005, 10h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo