Considérez :
select
pp.proname,
pl.lanname,
pn.nspname,
pg_get_functiondef(pp.oid)
from pg_proc pp
inner join pg_namespace pn on (pp.pronamespace = pn.oid)
inner join pg_language pl on (pp.prolang = pl.oid)
where pl.lanname NOT IN ('c','internal')
and pn.nspname NOT LIKE 'pg_%'
and pn.nspname <> 'information_schema';
Voir aussi :Quelle est la commande pour trouver le script d'une fonction existante dans postgresql ?
Utilisez pg_get_functiondef
ou le prosrc
colonne de pg_proc
directement. L'idée clé est de rejoindre sur pg_namespace
et filtrez les fonctions de catalogue PostgreSQL, qui seront probablement adéquates pour la plupart des besoins :
FROM pg_proc pp INNER JOIN pg_namespace ON (pp.pronamespace = pn.oid)
WHERE pn.nspname <> 'pg_catalog'
Le problème avec l'obtention du code source pour défini par l'utilisateur les fonctions décident quel utilisateur moyens. De nombreux types de fonctions peuvent être créés :
- Fonctions utilisant
CREATE EXTENSION
. - Fonctions créées par PostgreSQL.
- Fonctions compilées et installées par un administrateur.
Les super-utilisateurs disposant de droits suffisants peuvent définir des fonctions dans pg_proc
, mais généralement pas.
Étant donné que seuls les superutilisateurs peuvent créer des fonctions en langage C, excluez-les. De telles fonctions peuvent être installées de manière personnalisée sur une base de données particulière par l'administrateur, mais pas par un utilisateur normal.