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 :

Afficher commentaire séquence postgres


Sujet :

Requêtes PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Par défaut Afficher commentaire séquence postgres
    Bonjour

    Je cherche à afficher le commentaire d'une séquence postgres, ainsi que le commentaire d'une fonction, et ce soit à l'aide de requêtes sql, soit à l'aide de psql sous linux…

    J'ai essayé directement sous la console ceci :
    \d nom_sequence

    mais ça me renvoie ceci et non le commentaire en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Séquence « public.act_id »
        Colonne    |  Type   
    ---------------+---------
     sequence_name | name
     last_value    | bigint
     increment_by  | bigint
     max_value     | bigint
     min_value     | bigint
     cache_value   | bigint
     log_cnt       | bigint
     is_cycled     | boolean
     is_called     | boolean
    Auriez vous une idée de comment faire pour récupérer le commentaire d'une séquence et aussi d'une fonction sous postgres, comme on récupère le commentaire d'une table ou de ses champs ?

    Pour une table je fais comme ça et ça marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    -- Premièrement je récupère l'oid correspondant à ma table
    select oid from pg_class where relname = 'nom_table';
     
    -- Puis je récupère le commentaire
    select description from pg_description where objoid = '123456789' and objsubid = 0;
     
    -- On peut aussi récupérer le commentaire comme ça :
    select col_description('123456789','0');
    Cordialement,
    Ginger

  2. #2
    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
    Avec psql, \ds+ devrait faire l'affaire pour une séquence ou \df+ pour une fonction.
    En SQL, on peut aussi aller chercher dans pg_description comme pour une table, mais avec l'OID de la séquence.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Par défaut
    Merci pour la réponse Pour le commentaire d'une séquence ça fonctionne bien en psql :
    Ainsi que par ces 2 solutions de requête sql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select col_description('321654987','0');
    select description from pg_description where objoid = '321654987' and objsubid = 0;
    Pour le commentaire d'une fonction ça marche aussi avec psql, par contre en sql je n'arrive pas à récupérer l'oid de la fonction, ça existe au moins ?

    J'ai essayé ces 3 solutions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select oid from pg_class where relname = 'ma_fonction(param1, param2, param3)';
    select oid from pg_class where relname = 'ma_fonction()';
    select oid from pg_class where relname = 'ma_fonction';
    Mais le champ oid reste vide peut-être que c'est normal ?

  4. #4
    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
    Dans le cas d'une fonction l'OID doit être récupéré dans pg_catalog.pg_proc (plutôt que pg_class).

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Par défaut
    J'ai essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT 'ma_fonction(character varying,bigint,numeric)'::regprocedure::oid;
    Et ça renvoie bien l'oid de la fonction
    Je récupère la liste des fonctions comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from pg_proc proc join pg_language lang on proc.prolang = lang.oid where lang.lanname = 'plpgsql';
    et donc pour ta solution (merci ) j'ai tenté ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select oid from pg_catalog.pg_proc where proname = 'calcul_montant_remise' and proargnames = '{param1,param2,param3}' order by proname
    Mais si il y a plusieurs fonctions avec le même nom, comment savoir quel résultat est le bon ? Est ce possible de comparer les résultats avec le champ proargtypes ? C'est ce qui me semble être la seule solution de comparaison en ce cas…

    Si oui, est ce que chaque type (chaine, entier, decimal etc…) possède un numéro bien spécifique ? Parce que si j'affiche les résultats de cette requête, soit l'oid, le nom, les arguments et les types de la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select oid, proname, proargnames, proargtypes from pg_catalog.pg_proc where proname = 'ma_fonction'
    Résultats (2 lignes de résultats que j'ai condensé ici pour plus de clarté):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    oid : 123456789 | 321654987
    proname : ma_fonction | ma_fonction
    proargnames : {character varying,bigint,numeric} | {character varying,double precision,numeric}
    proargtypes : 1043 20 1700 | 1043 701 1700
    Et bien 1043 correspondrait à character varying, 20 à bigint, 1700 à numeric et double precision à 701…
    Est ce que c'est toujours pareil pour tout le monde ?

    Parce que si oui, comment écrire cette requête correctement ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select 'ma_fonction(1043,20,1700)'::regprocedure::oid;
    Ou alors comment récupérer les bons types des paramètres de la fonction ma_fonction ?

    En attendant j'utilise ma solution (qui au final fait bien la différence entre les fonctions grâce aux types des parametres…)

  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
    Et bien 1043 correspondrait à character varying, 20 à bigint, 1700 à numeric et double precision à 701…
    Est ce que c'est toujours pareil pour tout le monde ?
    Oui ce sont les OIDs des types dans pg_type.

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

Discussions similaires

  1. Afficher commentaire regex
    Par fezzani dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 25/06/2012, 13h14
  2. afficher commentaire dans la console
    Par Sinon dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/07/2010, 15h41
  3. Afficher commentaire dans une gallerie d'image
    Par Adeel.dev dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 03/06/2010, 07h48
  4. Réponses: 7
    Dernier message: 19/07/2008, 20h07
  5. afficher une séquence de fréquence des catégories
    Par mirandor dans le forum Langage
    Réponses: 3
    Dernier message: 19/05/2008, 08h23

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