Je veux pouvoir me connecter à une base de données PostgreSQL et trouver toutes les fonctions pour un schéma particulier.
Ma pensée était que je pourrais faire une requête à pg_catalog ou information_schema et obtenir une liste de toutes les fonctions, mais je ne peux pas comprendre où les noms et les paramètres sont stockés. Je recherche une requête qui me donnera le nom de la fonction et les types de paramètres qu'elle prend (et dans quel ordre elle les prend).
Y a-t-il un moyen de faire cela?
postgresql
function
Rudd Zwolinski
la source
la source
Après quelques recherches, j'ai pu trouver la
information_schema.routines
table et lesinformation_schema.parameters
tables. En utilisant ceux-ci, on peut construire une requête à cet effet. LEFT JOIN, au lieu de JOIN, est nécessaire pour récupérer des fonctions sans paramètres.la source
oidvectortypes
très utile. Voir la nouvelle réponse: stackoverflow.com/a/24034604/398670Si quelqu'un est intéressé, voici quelle requête est exécutée par
psql
postgres 9.1:Vous pouvez obtenir ce qui
psql
fonctionne pour une commande anti-slash en exécutantpsql
avec l'-E
indicateur.la source
ERROR: column p.proisagg does not exist
Il y a une fonction pratique
oidvectortypes
, qui rend cela beaucoup plus facile.Nous remercions Leo Hsu et Regina Obe de Postgres Online pour l'avoir signalé
oidvectortypes
. J'ai écrit des fonctions similaires auparavant, mais j'ai utilisé des expressions imbriquées complexes dont cette fonction ne nécessite plus.Voir la réponse associée .
(modifier en 2016)
Résumé des options de rapport typiques:
AVIS : utilisez
p.proname||'_'||p.oid AS specific_name
pour obtenir des noms uniques, ou pour JOIN avec desinformation_schema
tables - voirroutines
etparameters
à la réponse de @ RuddZwolinski.De la fonction OID (voir
pg_catalog.pg_proc
) et de la fonction de specific_name (voirinformation_schema.routines
) sont les principales options de référence aux fonctions. Ci-dessous, quelques fonctions utiles dans le reporting et d'autres contextes.la source
proname
est le nom, mais comment obtenir l'OID pour, par exemple. utiliser danspg_catalog.pg_get_function_result(oid))
?oid
colonne depg_proc
. C'est une colonne cachée.Exécutez sous la requête SQL pour créer une vue qui affichera toutes les fonctions:
la source
Est-ce une bonne idée de nommer les fonctions avec l'alias commun sur les premiers mots pour filtre le nom avec
LIKE
Exemple avec schéma public dans Postgresql 9.4, assurez-vous de remplacer par son schémala source
Exemple:
la source
psql
interface client Postgres. Cela ne fonctionnera que danspsql
et n'est pas techniquement une requête SQL.Obtenir la liste du schéma_fonction et du nom_fonction ...
la source
Cette fonction renvoie toutes les routines définies par l'utilisateur dans la base de données actuelle.
la source