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 :

Type de données "name"


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mars 2006
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestionnaire de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 356
    Par défaut Type de données "name"
    Dans la table système pg_class il y a le champ relname de type name.

    Question 1 : à quoi correspond ce type name ?

    Question 2 :

    dans un select je voudrais le caster en text.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     SELECT pg_class.relname::text
       FROM pg_class;
    ça ne fonctionne pas .

    Comment convertir relname en text ?

  2. #2
    Membre éclairé
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mars 2006
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestionnaire de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 356
    Par défaut
    j'ai la réponse à la question 1 :
    http://postgresql.developpez.com/doc...character.html

    "
    Il y a deux autres types caractères de taille constante dans PostgreSQL™, décrits dans le Tableau 8.5, « Types caractères spéciaux ». Le type name existe seulement pour le stockage des identifiants dans les catalogues systèmes et n'est pas destiné à être utilisé par les utilisateurs normaux. Sa taille est actuellement définie à 64 octets (63 utilisables plus le terminateur) mais doit être référencée en utilisant la constante NAMEDATALEN. La taille est définie à la compilation (et est donc ajustable pour des besoins particuliers). La taille maximale par défaut pourrait changer dans une prochaine version. Le type "char" (notez les guillemets) est différent de char(1) car il n'utilise qu'un seul octet de stockage. Il est utilisé dans les catalogues systèmes comme un type d'énumération économique.
    "

    reste à résoudre
    : comment caster relname ?

  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
    Citation Envoyé par jeanphi45 Voir le message
    reste à résoudre : comment caster relname ?
    Quel est le problème avec la requête de ton message? Tu dis qu'elle "ne fonctionne pas" mais pour ma part je ne vois pas ça.

  4. #4
    Membre éclairé
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mars 2006
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestionnaire de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 356
    Par défaut
    En fait , je suis dans pgadmin et j'ai créé une vue qui me liste tous les champs de toutes les tables de ma BD (sauf les tables systemes pg_%) :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     SELECT pg_class.relname, pg_attribute.attnum, pg_attribute.attname
       FROM pg_class
       JOIN pg_attribute ON pg_class.oid = pg_attribute.attrelid
      WHERE pg_class.relname !~~ 'pg_%'::text AND pg_attribute.attnum > 0;


    Le problème est que je voudrais exploiter relname dans Talend Open Studio et le fait que la donnée soit de type name m'empêche de travailler dessus.

    Dans pgadmin , quand je caste relname
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     SELECT pg_class.relname::text, pg_attribute.attnum, pg_attribute.attname
       FROM pg_class
       JOIN pg_attribute ON pg_class.oid = pg_attribute.attrelid
      WHERE pg_class.relname !~~ 'pg_%'::text AND pg_attribute.attnum > 0;
    , j'ai le message d'erreur suivant, cf shot
    Images attachées Images attachées  

  5. #5
    Membre éclairé
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mars 2006
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestionnaire de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 356
    Par défaut
    En fait , c'était un pb sous pgadmin :
    quand j'écris ma requete dans l'onglet définition , j'ai le message d'erreur.

    Ce que j'ai fait pour que cela fonctionne : j'ai créé ma propre requête sql pour créer la vue :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE VIEW champs_v AS 
     
     SELECT pg_class.relname::text, pg_attribute.attnum, pg_attribute.attname::text
       FROM pg_class
       JOIN pg_attribute ON pg_class.oid = pg_attribute.attrelid
      WHERE pg_class.relname !~~ 'pg_%'::text AND pg_attribute.attnum > 0;

    Merci pour votre aide

  6. #6
    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
    La requête montrée n'a pas de problème en soi. D'après le message d'erreur, c'est un problème de recréation d'une vue.

    Effectivement si on fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    create view v1 as select relname from pg_class;
    create or replace view v1 as select relname::text from pg_class;
    on obtient sur la 2eme instruction l'erreur suivante:
    ERROR: cannot change data type of view column "relname"
    En revanche si on fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    create view v1 as select relname from pg_class;
    drop view v1;
    create view v1 as select relname::text from pg_class
    Là ça passe.
    Moralité: pour changer la structure du résultat d'une vue, il faut d'abord la supprimer.

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

Discussions similaires

  1. [SQL SVR 2K]Données contenant double quote
    Par Franck2mars dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 11/01/2007, 10h46

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