web-dev-qa-db-fra.com

Liste les fonctions stockées qui font référence à une table dans PostgreSQL

Juste une question simple et rapide: dans PostgreSQL, comment lister les noms de toutes les fonctions/procédures stockées en utilisant une table en utilisant uniquement une instruction SELECT, si possible? Si un simple SELECT est insuffisant, je peux me débrouiller avec une fonction enregistrée.

Je pense que ma question est un peu similaire à cette autre question, mais cette autre question concerne SQL Server 2005:
Liste des procédures mémorisées du tableau

(facultatif) Comment listez-vous également les déclencheurs et les contraintes qui utilisent la même table de la même manière?

67
Paolo B.
SELECT  p.proname
FROM    pg_catalog.pg_namespace n
JOIN    pg_catalog.pg_proc p
ON      p.pronamespace = n.oid
WHERE   n.nspname = 'public';
92
Quassnoi
SELECT  proname, prosrc
FROM    pg_catalog.pg_namespace n
JOIN    pg_catalog.pg_proc p
ON      pronamespace = n.oid
WHERE   nspname = 'public';
16
davidwhthomas

Si vous utilisez psql, essayez \df

De la page de manuel:

Tip
To look up functions taking arguments or returning values of a specific type, use your pager's search capability to scroll through the \df output.

Lancer \set ECHO_HIDDEN révélera ce que \df fonctionne en coulisse.

13
dayer4b

Identique à @quassnoi et @davidwhthomas, sauf que j'ai ajouté les noms d'arguments dans cet emplacement:

SELECT  proname, proargnames, prosrc 
FROM    pg_catalog.pg_namespace n
JOIN    pg_catalog.pg_proc p
ON      pronamespace = n.oid
WHERE   nspname = 'public';

Si le but de la liste des fonctions est de les nettoyer ou d’itérer une nouvelle fonction avec une liste de paramètres changeants, vous devrez souvent supprimer des fonctions:

DROP FUNCTION <name>(<args>);

En ajoutant des noms de domaine, je suis en mesure de construire le nom de fonction applicable à la chute.

De plus, il est agréable de voir une image plus complète lors de l’évaluation des fonctions.

9
Matt Dressel

Vous pouvez utiliser le schéma standard information_schema pour obtenir des métadonnées sur votre base de données (elles sont au standard SQL, elles devraient donc fonctionner de la même manière dans différents systèmes de base de données). Dans ce cas, vous voulez information_schema.routines .

5
Lukáš Lalinský

Regardez ma recette . Il lit les fonctions et les déclencheurs. Il est basé sur des informations provenant de: Extraction d’informations META de PostgreSQL (INFORMATION_SCHEMA)

4
Michał Niklas

En excluant les éléments du système:

select proname from pg_proc where proowner <> 1;
4
windyjonas

Pour récupérer les types d'argument des fonctions, nécessaires pour référencer la fonction dans , MODIFIER - utiliser oldevectortypes a bien fonctionné pour moi. 

Voir Comment puis-je obtenir une liste de toutes les fonctions stockées dans la base de données d'un schéma particulier dans PostgreSQL?

0
storm_m2138