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

Requêtes PostgreSQL Discussion :

Cast automatique possible ou pas ?


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 276
    Points : 83
    Points
    83
    Par défaut Cast automatique possible ou pas ?
    Bonjour tout le monde, je débute avec PostrgeSQL et dés le départ je rencontre un gros problème. En fait, j'ai quelques 104 procédures a adapter et tester sous Postgres mais je viens de m'appercevoir que PorstGeSQL n'effectue de cast automatique. Cela est vraiment contraignant vu que je dois faire des cast dans les procédures et cela va nécessiter un temps inutile.
    Voila l'erreur que j'ai obtenu en exécutant ma 1ère procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    operator does not exist: integer = character varying
    Y a t il un patch ou un paramètrage particulier qui peuvent remèdier à ce problème.
    Merci d'avance.
    Cordialement.

  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 770
    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 770
    Points : 52 723
    Points
    52 723
    Billets dans le blog
    5
    Par défaut
    Non, il n'y a pas de transtypage automatique et les règles de transtypage sont données par la norme SQL qui considère toujours que l'on doit "trantyper au plus large" ce qui signifie qu'entre un type numérique et une chaine de caractères, c'est la chaîne de caractères qui l'emporte.

    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 expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    Concernant les conversions de types sur Postgresql c'est assez vicieux, généralement il vaut toujours mieux éviter qu'elles soient implicites, notamment quand on développe en PL/PgSQL par exemple
    Les indexes ne peuvent pas toujours être utilisés si par exemple on fait "where col_date = '20080101' " par exemple
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  4. #4
    say
    say est déconnecté
    Membre expérimenté
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 300
    Points
    1 300
    Par défaut
    Je remonte le post pour approfondir.

    Nous venons de migrer de PGSQL 8.1 à la 8.3.7...et là oh désespoir...plus d'implicit cast... 3 ans de dév foutus en l'air (j'exagère à peine)

    Il est dès lors possible de créer des cast soi-même.

    sauf que je m'en sors pas... j'ai prévu ce qui suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE OR REPLACE FUNCTION text(timestamp with time zone) RETURNS text
        AS $$ BEGIN
                    RETURN CAST($1 as text);
            END;
    $$ LANGUAGE plpgsql;
     
    CREATE CAST (timestamp with time zone as text) with
    function  text(timestamp with time zone) as implicit;
    l'idée étant de ne pas avoir à faire ça par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select to_date(now()::text,'YYYY-MM-DD')
    une fois le cast créé, j'ai un message de dépassement de pile (max_stack_depth), qu'est ce que j'ai foiré dans ma fonction?

    merci d'avance
    Ils ne savaient pas que c'était impossible alors ils l'ont fait (Mark Twain)
    _ _ _ _ _ _ _ _ _

    La planète ne nous appartient pas, elle nous a été prêtée par nos enfants
    _ _ _ _ _ _ _ _ _

    Technos : Access, C++ Builder, SQL, PostgreSQL, Crystal Reports, XML entre autres

  5. #5
    say
    say est déconnecté
    Membre expérimenté
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 300
    Points
    1 300
    Ils ne savaient pas que c'était impossible alors ils l'ont fait (Mark Twain)
    _ _ _ _ _ _ _ _ _

    La planète ne nous appartient pas, elle nous a été prêtée par nos enfants
    _ _ _ _ _ _ _ _ _

    Technos : Access, C++ Builder, SQL, PostgreSQL, Crystal Reports, XML entre autres

  6. #6
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    Citation Envoyé par say Voir le message
    Nous venons de migrer de PGSQL 8.1 à la 8.3.7...et là oh désespoir...plus d'implicit cast... 3 ans de dév foutus en l'air (j'exagère à peine)
    Au delà de ton erreur le problème c'est qu'avec des fonctions de cast partout les indexes risquent de ne plus pouvoir être utilisés dans les plans d'exécution

    Une migration de version Postgresql ne doit jamais se faire en big-bang "from scratch" sans aucun test préalable. Il faut impérativement bien recetter l'appli sur la nouvelle version justement pour éviter les problèmes de perfs ou même les erreurs de syntaxe qui ne passent plus ... et pouvoir corriger le SQL et Pg/SQL

    La compatibilité ascendante entre les versions de Postgresql est toujours délicate, il y a justement sur le site officiel les "notes de version" qui parlent des ces différences de comportement

    Si vraiment ton appli ne marche plus du tout niveau syntaxes et/ou perfs, je te conseille fortement de faire retour arrière sur une 8.1, et de bien préparer la migration en 8.3.7 avec une recette
    Les modifications à apporter au dév existant peuvent être conséquentes en nombre de jours/hommes, surtout si tu as des conversions implicites partout dans tes procédures stockées PL/PgSQL ...
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  7. #7
    say
    say est déconnecté
    Membre expérimenté
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 300
    Points
    1 300
    Par défaut
    Alors,

    Dans l'absolu, je suis archi d'accord..tests et recettage.
    en fait, nous n'avions encore jamais pris le temps de migrer pgsql (notamment à cause de composants tiers qui nous posaient problème), et nous ne nous attendions pas à une compatibilité ascendante comme celle-ci...qui reste cependant explicite et louable.

    Pour ce qui est du recettage, comme tu le dis, les J/H peuvent exploser...et donc tout dépend de la structure : nous sommes 3 ;-)
    retourner en 8.1...galère, notamment car nous voulions migrer en 8.3 pour passer en cluster avec pgpool ( et pouvoir rattacher les noeuds à chaud).

    Quoi qu'il en soit, nous avons créer nos casts.... et nous aviserons pas la suite



    C'était plus un cri de désespoir. ;-)
    Ils ne savaient pas que c'était impossible alors ils l'ont fait (Mark Twain)
    _ _ _ _ _ _ _ _ _

    La planète ne nous appartient pas, elle nous a été prêtée par nos enfants
    _ _ _ _ _ _ _ _ _

    Technos : Access, C++ Builder, SQL, PostgreSQL, Crystal Reports, XML entre autres

  8. #8
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    Si tu utilises des fonctions cast dans tes requêtes, fait bien attention aux plans d'exécution, il se peut que des indexes utilisés auparavant ne le soient plus si tu utilises des fonctions sur tes colonnes, et il se peut que tu aies des problèmes de performances liés à celà

    Il faudra peut-être que tu crées des indexes fonctionnels dans ce cas

    Bon courage en tout cas
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

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

Discussions similaires

  1. ajout liste déroulante automatiquement [possible ou pas]
    Par rouxfab dans le forum VBA Access
    Réponses: 3
    Dernier message: 14/04/2008, 23h38
  2. gerer lien sur image par css : possible ou pas?
    Par michka999 dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 17/08/2006, 16h01
  3. Possible ou pas ?
    Par Philippelid dans le forum Flash
    Réponses: 6
    Dernier message: 11/07/2006, 11h09
  4. [Flash][XML] Possible ou pas ?
    Par JohnBlatt dans le forum Flash
    Réponses: 1
    Dernier message: 31/01/2006, 01h25
  5. [VBA]possible ou pas ? creer une image jpg a partir 7 jpg
    Par sakuraba dans le forum Général VBA
    Réponses: 5
    Dernier message: 03/01/2006, 10h45

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