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

#1 19/05/2010 13:40:49

Arkhena
Membre

(Re)trouver la signature d'une fonction

Bonjour,

Afin de dropper une fonction, je dois connaître sa signature exacte.
Grâce à la table pg_proc, je récupère les données concernant la fonction. Malheureusement le champ proargtypes comporte des oids de type et je n'arrive pas à récupérer en une seule requête les types qui correspondent...

Comme un exemple est plus parlant qu'un long diecours, voilà ce que j'ai :

proargtypes : "1043 1043 1043 1043 23 1043 23"

Si je fais la requête suivante :
SELECT p.oid,p.proname, n.nspname, t.typname, n2.nspname, p.proisagg
FROM pg_proc p INNER JOIN pg_namespace n ON p.pronamespace = n.oid
               LEFT JOIN (pg_type t INNER JOIN pg_namespace n2 ON t.typnamespace = n2.oid
                         ) ON t.oid = ANY (p.proargtypes)
WHERE n.nspname = 'mon_schema'
    AND p.proname = 'mafonction'
ORDER BY n.nspname, p.proname, p.oid, t.typname

Il ne me sort que 2 lignes : Une pour le type 1043 et une autre pour le type 23.

Or, j'aurai voulu qu'il me sorte 7 lignes :
- 4 pour le type 1043
- 1 pour le type 23
- 1 pour le type 1043
- 1 pour le type 23

(Et dans l'ordre aussi tant qu'à faire...)
(Si je récupère les données en colonnes ou en chaîne de caractères, ça me va aussi)

C'est possible ou pas ?

Cordialement,

Arkhena

Dernière modification par Arkhena (19/05/2010 13:54:46)

Hors ligne

#2 19/05/2010 14:00:29

gleu
Administrateur

Re : (Re)trouver la signature d'une fonction

C'est pas si simple, ça dépend aussi du type IN/OUT/INOUT/TABLE, les trois derniers ne devant pas être pris en compte dans la signature. Dans pgAdmin, on se fait tout d'abord un cache des types (oid, nom) et on se sert de ce cache. Si c'est pour intégrer dans un programme, mieux vaut se faire un cache des types de données.


Guillaume.

Hors ligne

#3 19/05/2010 15:54:09

Arkhena
Membre

Re : (Re)trouver la signature d'une fonction

C'est pour ça que j'utilise proargtypes  qui correspond à la signature... :-)

Je dois juste dropper une cinquantaine de fonctions sur une soixante-dizaine de schémas... J'aurai voulu générer mon script par un programme...

Hors ligne

#4 19/05/2010 16:07:12

gleu
Administrateur

Re : (Re)trouver la signature d'une fonction

À part un petit script (Perl ou PHP par exemple), ce sera difficile de faire


Guillaume.

Hors ligne

Pied de page des forums