128 votes

comment afficher le code complet d'une procédure stockée ?

Comment visualiser une procédure/fonction stockée ?

Disons que j'ai une ancienne fonction sans la définition originale - je veux voir ce qu'elle fait dans pg/psql mais je n'arrive pas à trouver un moyen de le faire.

en utilisant Postgres version 8.4.1

264voto

Milen A. Radev Points 20462

\df+ <function_name> sur psql .

6 votes

Existe-t-il un moyen de l'imprimer ? La raison de ma question est que cela le rend illisible.

3 votes

C'est assez imprimé, pour moi. Rappelez-vous que si vous faites cela de manière interactive dans psql et que les lignes sont enveloppées et que le pager se déclenche, vous pouvez désactiver les lignes enveloppées en tapant '-S' (comme l'argument de ligne de commande 'less'), puis utiliser les touches fléchées pour faire défiler les lignes.

11 votes

Pour plus de lisibilité, vous pouvez utiliser le \x méta-commande psql avant d'afficher la définition de la fonction. \x est également utile pour afficher les résultats de requêtes contenant des enregistrements avec de longues chaînes de caractères.

172voto

Asha Koshti Points 411

\ef <function_name> dans psql. Cela donnera la fonction entière avec du texte éditable.

2 votes

Réponse exacte. Cela ouvrira la définition de la fonction dans l'éditeur.

3 votes

C'est la meilleure réponse ! Elle montre la définition de la fonction de manière lisible.

5 votes

N'oubliez pas de taper ; <enter> après avoir exécuté le tampon.

75voto

Maxim Points 587
SELECT prosrc FROM pg_proc WHERE proname = 'function_name';

Cela indique au gestionnaire de fonction comment invoquer la fonction. Il peut s'agir du code source de la fonction pour les langages interprétés, d'un symbole de lien, d'un nom de fichier ou de tout autre élément, selon le langage d'implémentation et la convention d'appel.

0 votes

C'est utile. Y a-t-il un moyen d'avoir une sortie joliment imprimée ?

0 votes

C'est utile car cela ne nécessite pas psql . Notez que les noms des fonctions sont en minuscules.

0 votes

@Maxim, savez-vous comment détecter le type de retour et les arguments d'entrée ?

23voto

Frank Heikens Points 29270

Utiliser pgAdmin ou utiliser pg_proc pour obtenir la source de vos procédures stockées. pgAdmin fait de même.

3 votes

Pg_proc c'est tout ! Ouf, je suis content qu'ils aient économisé quelques octets d'espace en ne l'appelant pas pg_procedure... :)

14 votes

Il est assez facile de trouver les requêtes que psql utilise pour récupérer ces informations (par exemple, pour l'option \df ) en démarrant psql avec le paramètre --echo-hidden. Cela affichera toutes les requêtes qui sont utilisées en interne. pg_proc ne stocke pas une instruction CREATE FUNCTION complète. Vous pouvez utiliser pg_get_functiondef() pour récupérer la source complète.

5 votes

Juste au cas où quelqu'un serait confus quant à l'emplacement de cette table : pg_catalog -> system table -> pg_proc

17voto

Puneet Purohit Points 422

Utilisez \df pour lister toutes les procédures stockées dans Postgres.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X