Vous n'êtes pas identifié(e).
Pages : 1
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
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
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
À part un petit script (Perl ou PHP par exemple), ce sera difficile de faire
Guillaume.
Hors ligne
Pages : 1